我是一名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的脚本编辑器中编写和执行.
为什么是这样?
我有一个带有自定义函数公式的 Google 表格:从电子表格中获取一个矩阵和两个向量,进行一些冗长的矩阵向量计算(>30 秒,因此超出配额),然后将结果输出为一堆行。它是单线程的,因为这就是 Google Apps 脚本 (GAS) 本身的本质,但我想使用多线程解决方法并行化计算,因此它可以大大加快计算速度。
\n要求(1-3):
\n用户体验:它应该作为自定义函数公式自动且反应性地运行计算,这意味着用户不必通过单击运行按钮或类似按钮来手动启动它。就像我目前的单线程版本一样。
\n可并行化:理想情况下,它应该生成约 30 个线程/进程,这样就不会像现在那样花费 >30 秒(这会导致由于 Google 的配额限制而超时),而应该花费约 1 秒。(我知道 GAS 是单线程的,但有一些解决方法,如下所述)。
\n可共享性:理想情况下,我应该能够与其他人共享工作表,以便他们可以“制作副本”,并且脚本仍将为他们运行计算:
\n我已经阅读了@TheMaster 的这篇优秀的相关答案,其中概述了解决 Google Apps 脚本中并行化问题的一些潜在方法。解决方法 #3google.script.run和解决方法 #4 UrlFetchApp.fetchAll(均使用 Google Web …
multithreading mapreduce google-sheets google-apps-script custom-function
我正在制作一个调用 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