Google Apps脚本是否同步?

问题描述 投票:9回答:2

我是同时学习JavaScript和Google Apps脚本的Java开发人员。作为新手,我学习了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;
}

而且有效!一切正常!如果我不继续学习JavaScript,我会说它像发条一样工作。但是JavaScript并不是一个发条,它是异步的,从我的理解来看,它根本不起作用,它将“编译”,但是记录json变量应该记录未定义,但是它记录JSON没问题。

NOTE:

该代码是在Google表格的脚本编辑器中编写和执行的。

这是为什么?

javascript google-apps-script v8
2个回答
13
投票

虽然Google Apps脚本implements a subset of ECMAScript 5,没有强制它异步的内容。

虽然JavaScript的主要功能确实是异步特性,但Google开发人员似乎已经放弃了它,转而使用了更简单,更直接的API。

UrlFetchApp方法是同步的。它们返回HttpResponse对象,并且不进行回调。显然,这是API的决定。


3
投票

请注意,自introduction of V8 runtime for google app scripts以来,这并没有真正改变。

运行Promise.all(func1, func2),我可以看到第二个函数中的代码要等到第一个函数完成才执行。

此外,没有still没有用于分支执行顺序的setTimeout()全局函数。任何API都不提供回调函数或类似Promise的结果。似乎GAS的现行理念是使所有内容同步。

© www.soinside.com 2019 - 2024. All rights reserved.