相关疑难解决方法(0)

谷歌应用脚​​本是同步的吗?

我是一名Java开发人员,同时学习JavaScript和Google Apps脚本.作为新手,我学习了JavaScript的语法,而不是它的实际工作方式,我很乐意在Google Apps脚本中删除并按顺序和同步编写代码,就像Java一样.我的所有代码都类似于:( 大大简化以显示我的意思)

function doStuff() {
  var url = 'https://myCompany/api/query?term<term&search';
  var json = getJsonFromAPI(url);
  Logger.log(json);
}

function getJsonFromAPI(url) {
  var response  = UrlFetchApp.fetch(url);
  var json = JSON.parse(response);
  return json;
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理!它工作得很好!如果我不继续研究JavaScript,我会说它就像发条一样.但JavaScript不是一个发条,它是光荣的异步,根据我的理解,这根本不起作用,它会"编译",但记录json变量应该记录未定义,但它记录JSON没有问题.

注意:

代码在Google Sheet的脚本编辑器中编写和执行.

为什么是这样?

javascript v8 google-apps-script

7
推荐指数
3
解决办法
6222
查看次数

如何并行执行自定义函数公式,同时保持 Google 表格可共享且无需许可?

我有一个带有自定义函数公式的 Google 表格:从电子表格中获取一个矩阵和两个向量,进行一些冗长的矩阵向量计算(>30 秒,因此超出配额),然后将结果输出为一堆行。它是单线程的,因为这就是 Google Apps 脚本 (GAS) 本身的本质,但我想使用多线程解决方法并行化计算,因此它可以大大加快计算速度。

\n

要求(1-3):

\n
    \n
  1. 用户体验:它应该作为自定义函数公式自动且反应性地运行计算,这意味着用户不必通过单击运行按钮或类似按钮来手动启动它。就像我目前的单线程版本一样。

    \n
  2. \n
  3. 可并行化:理想情况下,它应该生成约 30 个线程/进程,这样就不会像现在那样花费 >30 秒(这会导致由于 Google 的配额限制而超时),而应该花费约 1 秒。(我知道 GAS 是单线程的,但有一些解决方法,如下所述)。

    \n
  4. \n
  5. 可共享性:理想情况下,我应该能够与其他人共享工作表,以便他们可以“制作副本”,并且脚本仍将为他们运行计算:

    \n
  6. \n
\n
    \n
  • 3.1无许可:我不必手动向用户授予个人权限(无许可)。例如,每当有人“制作副本”和“以访问网络应用程序的用户身份执行应用程序”时。我的初步测试表明这是可能的。
  • \n
  • 3.2非侵入性:电子表格的用户无需提供侵入性授权,例如“授予此电子表格/脚本/应用程序访问您整个 Google Drive 或 Gmail 帐户的权限?”。只要仍然保留要求 3.1,用户必须向脚本/Web 应用程序提供非侵入式授权是可以接受的。
  • \n
  • 3.3 UX:不强迫用户查看电子表格中的 HTML 侧边栏。
  • \n
\n

我已经阅读了@TheMaster 的这篇优秀的相关答案,其中概述了解决 Google Apps 脚本中并行化问题的一些潜在方法。解决方法 #3google.script.run和解决方法 #4 UrlFetchApp.fetchAll(均使用 Google Web …

multithreading mapreduce google-sheets google-apps-script custom-function

6
推荐指数
1
解决办法
889
查看次数

在 Google Apps 脚本中异步运行函数

我正在制作一个调用 GAS 函数的 Slack 机器人。一切正常,只是 Slack 显示错误消息,因为它在调用 API 时只等待 3 秒响应。

任何人都可以帮助我弄清楚如何异步运行 everyDay2 ,以便我可以在完成之前返回响应。我尝试过 Promise 和回调,但无法解决。

function doPost(e){

  const promise = new Promise(everyDay2);

  return ContentService.createTextOutput('thinking...');

}
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous promise google-apps-script slack-api

0
推荐指数
1
解决办法
2661
查看次数