Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google Appscript/UrlFetchApp.fetchAll()函数是否同步运行?_Javascript_Google Apps Script_Google Data Studio - Fatal编程技术网

Javascript Google Appscript/UrlFetchApp.fetchAll()函数是否同步运行?

Javascript Google Appscript/UrlFetchApp.fetchAll()函数是否同步运行?,javascript,google-apps-script,google-data-studio,Javascript,Google Apps Script,Google Data Studio,我遇到的问题是,我有许多API请求要执行,所有这些请求都需要几秒钟才能返回,因为返回的数据的大小,UrlFetchApp.fetchAll(…)只是返回一个空JS对象数组,例如:[{},{},{},{},{},…] 我的请求数组如下所示(格式清晰): 发出请求的代码: responses = UrlFetchApp.fetchAll(requests); // returns back '[{}, {}]' console.log(JSON.stringify(responses)); 我可

我遇到的问题是,我有许多API请求要执行,所有这些请求都需要几秒钟才能返回,因为返回的数据的大小,
UrlFetchApp.fetchAll(…)
只是返回一个空JS对象数组,例如:
[{},{},{},{},{},…]

我的请求数组如下所示(格式清晰):

发出请求的代码:

responses = UrlFetchApp.fetchAll(requests);

// returns back '[{}, {}]'
console.log(JSON.stringify(responses));
我可以通过数据库确认API调用正在运行,因为AWS RDS性能指标显示DB查询正在运行,我还可以确认API本身通过NewRelic以200的响应,这就是为什么我的直觉是我没有正确使用GAS/
UrlFetchApp.fetchAll()

因此,我想知道:

  • GAS是否同步运行,也就是说,它将等待
    .fetchAll()
    返回,然后再运行
    控制台.log(…)
  • 我是否正确地调用了
    fetchAll
    ?目前处于亏损状态,而谷歌Appscript文档充其量也很贫乏
  • 提前谢谢你的帮助

    编辑:

    成功使用
    fetch
    后,我迁移到
    fetchAll
    ,例如:

    // synchronously fetching one by one
    requests.map(request => UrlFetchAll.fetch(request.url, { validateHttpsCertificates: false });
    
    这个答案怎么样

    对问题1的答复: fetchAll方法与异步处理一起工作。若要将URLFACHTAPP用于同步处理,请在循环中使用
    URLFACHTAPP.fetch()

    对问题2的答复: 我认为您对fetchAll方法的请求是正确的。为了从
    UrlFetchApp.fetchAll(请求)
    检索响应,下面的修改如何

    修改脚本:
    • 在此修改中,每个响应都使用了
      getContentText()
    • 响应的顺序与请求的顺序相同
    参考资料:

    如果我误解了你的问题,并且这不是你想要的结果,我道歉。

    嘿,谢谢你,我会尝试一下,然后再报告@斯图,我的回答告诉你结果了吗?你能告诉我这件事吗?这对我的学习也很有用。如果这样做有效,其他与你有相同问题的人也可以将你的问题作为可以解决的问题。如果你对我的回答还有疑问,我道歉。那时候,我可以问一下你目前的情况吗?我想学习来解决你的问题。嘿,对不起,我没有早点回来,但是是的!这帮了大忙。非常感谢你的帮助@斯图,谢谢你的回复。我很高兴你的问题解决了。也谢谢你。
    // synchronously fetching one by one
    requests.map(request => UrlFetchAll.fetch(request.url, { validateHttpsCertificates: false });
    
    var responses = UrlFetchApp.fetchAll(requests);
    var res = responses.map(function(e) {return e.getContentText()});
    console.log(JSON.stringify(res)); //  or Logger.log(JSON.stringify(res));