google.script.run.withSuccessHandler() 返回未定义

2024-04-14

我使用下面提供的代码在单独的 GS 文件中创建了一个数组。我尝试在 HTML 文件中调用它。我的目标是将数组的内容与参数进行比较email。但是,返回的值google.script.run.withSuccessHandler() is undefined

//in GS
function mailGetter()
{
  //open sheet
  var sheet = SpreadsheetApp.openByUrl("https://sheet.url").getSheetByName("Email Sheet").activate();
  //get size of given row range
  var row_data_email = sheet.getRange("C2:C").getValues();
  var emailArray = row_data_email.join().split(',').filter(Boolean);
  Logger.log(emailArray);
  
  return emailArray;
}
//in HTML
function checkEmail(email) 
    {
      var reg1 = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
      var arraySize = google.script.run.withSuccessHandler(misc).sizeGetter(); 
      console.log(arraySize);
      var emailArray = new Array(arraySize);
      emailArray = google.script.run.withSuccessHandler(misc).mailGetter();
      console.log(emailArray);
      
      if (reg1.test(email) == false) 
      {
        emails.style.border = "1px solid red";
        document.getElementById('submitBtn').disabled = true;
      } 
      else if (reg1.test(email) == true) 
      {
        emails.style.border = "1px solid green";
        document.getElementById('submitBtn').disabled = false;
      }
      
      for (var row = 0; row < arraySize; row++)
      {
        if (emailArray[row][0] == email)
        {
          emails.style.border = "1px solid green";
          document.getElementById('submitBtn').disabled = false;
          break;
        }
        else if (emailArray[row][0] != email)
        {
          emails.style.border = "1px solid red";
          document.getElementById('submitBtn').disabled = true;
        }
      }
    }

    function misc()
    {
      console.log("Pass");
    }

Issue:

  • 使用异步函数的(google.script.run) 返回值,该值始终是undefined.

解决方案:

  • 使用另一个答案中提到的 successHandler 或我们可以将 Promise 与 async/await 一起使用。

Snippet:

/*Create a promise around old callback api*/
const p = func => 
  new Promise(resolve=>
    google.script.run.withSuccessHandler(resolve)[func]()
  );

async function checkEmail(email) //modified
    {
      var arraySize = await p('sizeGetter');//Wait to resolve
      console.log(arraySize);
      //var emailArray = new Array(arraySize);
      var emailArray = await p('mailGetter');//Wait to resolve
      console.log(emailArray);
      //....
    }

Note:

  • 最好减少对服务器的调用次数。如果你能将两者结合起来Getter如果是单一服务器功能,那就更好了。
  • 上面是一个片段,展示了如何使用async/await。但是,如果您等待服务器的每个响应(如上所示),您的前端/UI 将会很慢。仅在绝对必要时等待。对服务器的调用应该是非阻塞/异步的。

参考:

  • Promises https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#Creating_a_Promise_around_an_old_callback_API
  • async https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
  • await https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

google.script.run.withSuccessHandler() 返回未定义 的相关文章

  • .setFormula() 并收到错误缺少 ) 参数列表

    I have setFormula 并坚持这一点 我认为问题在于逗号 在发布这个问题之前 我研究了几个在线论坛 但没有运气 也许这里有人可以帮助我 我确实知道使用的规则 and 这就是为什么我尝试了几个公式 但仍然收到错误消息 参数列表后缺
  • “在 Chrome 网上应用店中注册”未显示在 Google 脚本编辑器中

    我正在尝试将脚本 在脚本库中称为 Paypal 商店 作为 Chrome 网上应用店中的网络应用程序发布 但 Google 脚本的 发布 菜单中未显示 在 Chrome 网上应用店中注册 项目编辑器 此菜单中唯一的项目是 发布到库 和 部署
  • 在网页中显示 Google 工作表单元格的内容

    我有一个包含 html 代码的单元格的 google 工作表 我想知道在网页中显示此 html 的最佳方式 我尝试过谷歌电子表格 API 和谷歌可视化 API 以下是如何使用 Javascript 图表 API 显示单个单元格中的信息 也许
  • Visual Studio 2010 基类扩展编译器错误

    我有一个 C 类 提供一些简单的类和一些基类扩展 例如这个 public static Boolean ToBooleanOrDefault this String s Boolean Default return ToBooleanOrD
  • Google Apps 脚本:从云端硬盘下载文件(同一用户)

    我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件 可能是 csv 文件 我找到了 getDownloadUrl 方法 但我不知道该做什么do用它 我目前正在尝试以下代码 其中files是文件夹中的文件列表
  • 如何读取 Google 表格中单元格的颜色

    我正在使用 Python Google Sheets API 并且我想读取单个单元格的颜色 我已阅读文档 但我只能找到有关如何从单元格检索文本的信息 而不是颜色格式的信息 您可以使用方法 电子表格 get https developers
  • 在Web应用程序中调用phonegap插件功能

    我正在构建我的第一个phonegap应用程序 当我打开该应用程序时 我立即将用户重定向 window location 到托管我的网络应用程序的服务器 是否可以从那里加载phonegap 插件 因为 deviceready 事件没有触发 我
  • 无法实施第三方 Google 日历会议插件

    我正在研究 Google 日历会议插件的实施并发现了一些问题 我按照文档执行示例代码 但它没有按预期工作 从我的角度来看 我的清单文件是完整的 但是当我尝试从 从清单部署 链接发布日历会议插件时 它会打开我的谷歌日历 但它不会显示我的会议
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 复制电子表格也会复制所有链接的文件

    当我使用库方法时 我希望能够仅复制电子表格及其所有工作表以及所有定义的工作表名称 spreadSheet copy newSSName Or myFile makeCopy newNameOfFile 目前 这些方法复制所有链接的表单和表单
  • 如何使用 Google Sheets onEdit() 触发器运行函数来更新 Google Form

    我有一个 Google 表格工作簿 其中有一个工作表 我想用它来保存工作簿和 Google 表单的设置 我做了一个定制onEdit 触发两个函数的函数 一个用于更新工作簿 另一个用于更新表单 function onEdit e var ra
  • 如何使用 OnChange() 触发器

    我有一个电子表格以及该电子表格的主副本 每次用户将数据输入单元格时 它都会获取新数据并放入主副本中 然而最近 我注意到一个用户创建了一个新列 该列未被 OnEdit 捕获 于是我查了一下 看到了去年实现的OnChange 但是 我不知道如何
  • 当达到最小起订量时,如何重置 Google 表格中的运行总计?

    请提供数组公式 当达到最小起订量时 您可以帮助重置运行总计吗 这里最小起订量 15 当运行总计等于或大于 15 时 应重新启动 Date Value Desired 12 2022 6 6 01 2023 5 11 02 2023 4 15
  • setInterval() 如何影响性能?

    我们正在使用 Twitter Bootstrap 作为框架构建一个 Web 应用程序 但在显示 隐藏工具提示时遇到问题 除了尝试找到实际问题的解决方案之外 我还有一个关于我们同时使用的解决方法的问题 从性能角度来看 使用 setInterv
  • Google Apps 脚本是否允许任何类型的内省?

    Google Apps 脚本可以学习自己的名称吗 或者它的ID 它可以获取其包含文件夹的 ID 吗 它可以了解它在文件夹层次结构中的位置吗 脚本 A 可以获取 设置脚本 B 的属性吗 脚本 A 可以编辑脚本 B 使用的库的任何方面吗 脚本
  • Google Sheets API v4 和 valueInputOption

    我的电子表格中有三列 第一个是日期 第二个和第三个是简单字符串 当我批量上传数据时valueInputOption RAW 我的日期列得到错误的结果 所有日期前面都有一个看不见的撇号 字符串列没问题 当我使用valueInputOption
  • 关于多客户端和可定制 Web 应用程序的架构所需的建议[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如果行值存在于另一个工作表中,则将其复制到新工作表

    我是 Google 脚本新手 需要创建一个脚本 我找到了这个question https stackoverflow com questions 22008331 google script delete row if a value in
  • 查询新的谷歌电子表格

    我使用谷歌可视化创建了一个折线图 该代码查询谷歌电子表格 当我使用普通电子表格 第 1 行 时 它可以工作 当我使用新的谷歌电子表格 第 2 行的 URL 时 出现以下错误 Error in query request time out 我
  • Google Sheets 自定义数字格式、颜色规范

    我有一个自定义的百分比数字格式 这是代码 Green 0 0 Red 0 0 输出预览 Positive 123 456 0 Green Negative 123 456 0 Red 我想要绿色更深一些 我已经尝试过了 Dark Green

随机推荐

  • 如何防止Python中的某些特定键“发送”输入

    我正在尝试使用Python 来代替AutoHotkey 我已经设置了 pynput 来监听按键 并且大部分内容都按照我的预期工作 但是 我有一个问题 如果我通过监听键盘并在按键上执行某些操作来 重新绑定 一个键 它仍然会发送原始命令 我不了
  • WinRT 中的 ICMP Ping - 可能吗? [复制]

    这个问题在这里已经有答案了 如何在 WinRT 现代 UI 应用程序中执行 ICMP ping 目前 WinRT 中未实现 Ping 请参阅相关问题here https stackoverflow com questions 1095234
  • 为什么我的汇编程序没有将 r1 设置为正确的值?

    我正在 LC3 机器上编写汇编程序 我的汇编程序是一个 LC3 程序 它将 R2 和 R3 相乘并将结果存储在 R1 中 这是我的源代码 带注释 Sets pc to this address at start of program ORI
  • 如何在文本中添加/插入 xml 节点

    我正在生成一个基于 XML 的开放文档格式 odt 的文本文档 但是在文本段落中添加制表符时遇到问题 当我在 Open Office 应用程序中创建它并保存文档时 该段落的内部 XML 表示形式为
  • 最小最大价格范围验证不适用于 jquery.validate.js

    我正在使用的表单验证https jqueryvalidation org https jqueryvalidation org 我已经通过 dependent 属性实现了自定义验证规则 以下是验证错误规则 如果未选择两个价格框 则不会显示错
  • 如果字符串是...然后用图像替换它?

    我有以下代码 对此有三种可能的字符串输出 food drink food Drink 我想用小图标替换这些字符串 例如代表 饮料 的玻璃杯 有没有一种简单的方法可以用 PHP 来做到这一点 Thanks 您可以通过数组映射值 items a
  • 鉴于其中一些变量可能不存在,如何保留变量列表?

    我有100个dta文件 我有一个我需要的变量列表keep并即时保存临时副本 某些变量可能存在于某个特定的环境中 也可能不存在dta 我需要 Stata 来保留 a 中存在的所有变量dta并忽略那些不存在的 下面的代码有错误的语法 但它可以作
  • div 内的左/右浮动按钮

    如何让按钮只浮动在div区域 这是我的 CSS 和 HTML 示例 test width 60 display inline overflow auto white space nowrap margin 0px auto div clas
  • 将自定义中心按钮添加到选项卡栏的最佳方法是什么?

    许多应用程序都有一个标准选项卡栏 中间有一个自定义按钮 可以执行一些特殊功能 一些例子可以在这里找到 http mobile patterns com custom tab navigation http mobile patterns c
  • Powershell Get-ChildItem 目录中的最新文件

    我们生成名称中带有日期的文件 下面是日期的通配符 我想获取最后一个文件 并且包含该文件的文件夹的标题中也有一个日期 仅月份 我正在使用 PowerShell 并安排它每天运行 这是到目前为止的脚本 LastFile DailyFile co
  • 使用项目资源(WPF)的图像源

    我添加了一堆图像作为项目资源 现在我想在我的 WPF 应用程序中使用图像控件来使用它们 如何将资源分配给图像控件的源 首先 在 Visual Studio 的属性窗口中将图像文件标记为 资源 然后您可以很容易地使用文件名引用资源
  • 多个 bitbucket 帐户的 ssh 配置 - 简单的示例,但出现“远程端意外挂断”

    假设我的 bitbucket 用户名是 jon 并且我有一些个人项目https bitbucket org jon 假设我加入了一个开发团队 该团队有一个名为 devteam 的 bitbucket 帐户 可以在以下位置找到该帐户 http
  • 一个月中的一周熊猫

    我试图每个月坚持一周 有些月份可能有四个星期 有些可能有五个星期 对于每个日期 我想知道它属于哪一周 我最感兴趣的是本月的最后一周 data pd DataFrame pd date range 1 1 2000 periods 100 f
  • 如何使用反射更改 kotlin 私有 val?

    我可以使用反射访问私有 val 值 如下所示 fun main val mainClass MainClass val f MainClass class memberProperties find it name info f let i
  • 一瞥让一切都慢了 50 倍

    我一直在使用glimpse来尝试解决一些页面速度慢的问题 结果发现glipse就是原因 页面请求超过 30000 秒 毫不夸张地说它们是即时的 所以我一直在追鬼 当导致如此速度差异时 我如何使用一瞥来查看一切需要多长时间 我是否配置错误或者
  • 如何在 iPad 硬件中(而不是在模拟器中)测试 iPad 应用程序

    在 iPad 模拟器上完成构建和测试后 我需要在 iPad 硬件上测试该应用程序 我怎样才能做到这一点 如果您已支付开发人员密钥的费用 则应该能够打开管理器窗口 设置您的设备 然后选择设备而不是模拟器作为 XCode 中的目标 看苹果的文档
  • 更高效的 matplotlib 堆积条形图 - 如何计算底部值

    我需要一些帮助 使用 matlibplot 在 python 中制作一组堆积条形图 我的基本代码如下 但我的问题是如何生成值bottom对于第二个之外的任何元素有效率的 我可以让示例图正确堆叠 始终从下到上为 a b c d import
  • 我应该在 OBDII 的 BLE IOS 设备中使用什么 BLE 特性

    您好 我想知道我应该从这个 OBDII BLE 设备 加密狗中使用什么写入和通知特性 我想在 Flutter 中创建一个适用于 IOS 的程序 有不少 Device name VEEPEAK Device id 34E2B2AF 60F4
  • 更改值结转次数的 maxgap

    我有一个类似于以下内容的数据框 library data table test lt data table data frame value c 5 NA 8 NA NA 8 6 NA NA 10 locf N c 1 NA 1 NA NA
  • google.script.run.withSuccessHandler() 返回未定义

    我使用下面提供的代码在单独的 GS 文件中创建了一个数组 我尝试在 HTML 文件中调用它 我的目标是将数组的内容与参数进行比较email 但是 返回的值google script run withSuccessHandler is und