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() 返回未定义 的相关文章

  • 模板化 HTML 脚本中的换行符

    如果我有一个 HTML 文件 test html p p 和一个脚本函数 var t HtmlService createTemplateFromFile test html t str test nstring var content t
  • Ruby on Rails(三)隐藏部分视图

    我正在开发 Ruby on Rails 3 Web 应用程序 我有一个名为User有一列名为role 我正在寻找对视图的这些部分具有 错误 角色的用户隐藏视图部分的最佳方法 例如我希望所有用户都能够看到用户index页面 但我只想要具有角色
  • 为什么电子邮件正文给出不同的输出?

    我正在尝试触发来自 Google 应用程序脚本的电子邮件 const body HtmlService createHtmlOutput A b new task b have been added to the Task Manager
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • JDBC set_approle

    我正在尝试使用prepareCall 通过 JDBC 连接设置应用程序角色 它似乎工作正常 即语法方面 但 SQL Server 2008 返回此错误 Application roles can only be activated at t
  • 如何仅在数据库、模式和表尚不存在时自动创建它们

    我想创建一个简单的网络应用程序 允许远程客户端跟踪发布请求中的某些内容 将所有跟踪保存在轻量级数据库中 返回 get 请求的所有跟踪 关于数据库 我想 将其位置放在我的 web 应用程序的属性文件中 并将此位置用于 persistence
  • Google Apps 脚本:如何水平对齐 inlineImage

    我有以下代码 它是一个更大程序的一部分 我正在尝试将图像从我的 Google 驱动器插入到 Google 文档中 并调整其大小并居中 到目前为止 我能够让程序插入图像并调整其大小 但我不知道如何使 inlineImage 居中 我是使用谷歌
  • 在java中设置Process对象的安全性

    有人可以告诉我如何限制通过进程对象访问系统属性吗 如果我通过进程对象运行以下代码 我可以抛出安全异常吗 System getProperty user home 请告诉我如何为流程对象配置证券 在ProcessBuilder类文档中 环境方
  • 通过嵌入式 Google Sheet 上的按钮激活脚本

    我正在尝试嵌入一个 Google 电子表格 其中包含一个我希望用户能够激活的脚本 我不希望他们能够编辑页面上的任何内容 我想我可以这样做 共享工作表并设置编辑权限 限制在我想要共享的一张纸上进行编辑 图像位于单元格上方 所以我认为这会阻止人
  • 如果您有多个表单向单个电子表格发送响应,Google 如何知道提交表单时要执行哪个 onsubmit 触发器

    我需要有人澄清 据我了解 多个表单可以将其回复发送到新 Google 表格中的单个电子表格 因此 我创建了两个 Google 表单 并让他们都将回复发送到新的 Google 电子表格 然后我在电子表格 而不是表单 中创建了两个脚本 每个脚本
  • 如何更改部署在tomcat中的Web应用程序浏览器标题栏中显示的徽标?

    我在 tomcat 中部署了一个 Web 应用程序 当我在浏览器中打开应用程序时 地址栏中 URL 之前的图像和选项卡上应用程序标题之前的图像都显示 tomcat 图像 我想改变这一点并在这两个地方放入我自己的徽标 我怎样才能做到这一点 这
  • 复制带有内嵌图像的表格

    我正在尝试将 GDoc 的内容复制到另一个 GDoc 中 这对于所有不同的元素类型都非常有效 包括一个表 枚举DocumentApp ElementType TABLE 但是 如果表包含内联图像 EnumDocumentApp Elemen
  • 缓存清单大小限制和 Web 应用程序

    我正处于编写应用程序的规划阶段 仍在选择我希望用来编写应用程序的技术 最初的想法是编写一个网络应用程序 但这有 有 无法离线查看的缺点 然后我发现了缓存清单 这似乎是一个答案 然而 从第一点开始 缓存清单似乎有大小限制 我找不到每个浏览器的
  • 解析 Google 表格中制表符分隔的文本文件

    我在网上有一个 txt 文件 其中包含制表符分隔值 TSV CSV 如下所示 产品IDtabColortabPricetabQuantity项目1tabRed tab 5 2 tab5项目2tabBlue tab 7 5 tab10 我使用
  • Google App脚本:无法保留前导零,因为它被自动删除

    我是谷歌脚本的新手 我有一个像下面这样的场景 我有 Sheet1 其中包含 A 列和 B 列 通常我尝试将十进制值存储到其中 我的意思是A列中的整数部分和B列中的小数部分 例如 场景一 如果值为 23 75 则 Column A 应为 23
  • 如何在登录名控件中显示用户名

    我有一个母版页 其中包含基于母版页的所有后续页面上显示的登录视图内容 我有一个用户名控件也嵌套在登录视图中 用于在用户登录时显示用户名 母版页中登录视图的代码显示如下 div class loginView div
  • war 文件大小是否会以某种方式影响应用程序和/或应用程序服务器的性能?

    我们一直在工作中遇到困难 有人建议我们应该减小 war 文件的大小 特别是 WEB INF lib 目录的大小 以提高生产 JBoss 实例的性能 有件事我至今仍心存疑虑 我们的应用程序服务器中部署了大约 15 个 Web 应用程序 每个应
  • 用于以两种方式提取特定值的 Google Sheets 公式

    我正在尝试使用 Google 中的电子表格做一些不同的事情 但我正在使用的公式遇到了一些问题 我希望有人能够指导我找到更好的解决方案或能够纠正我当前遇到的问题 首先 这是我从中提取的表 1 上的数据视图 Example Spreadshee
  • 如何删除 GMail 标签 - Google Apps 脚本

    我想从放回收件箱的每封邮件中删除 后续 标签 我尝试了几件事 但仍然没有成功 我希望有人可以帮助我或为我指明正确的方向 涉及的函数是 function moveToInbox page GmailApp moveThreadsToInbox
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序

随机推荐

  • 如何防止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