Javascript Google Appscript/UrlFetchApp.fetchAll()函数是否同步运行?
我遇到的问题是,我有许多API请求要执行,所有这些请求都需要几秒钟才能返回,因为返回的数据的大小,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)); 我可
UrlFetchApp.fetchAll(…)
只是返回一个空JS对象数组,例如:[{},{},{},{},{},…]
我的请求数组如下所示(格式清晰):
发出请求的代码:
responses = UrlFetchApp.fetchAll(requests);
// returns back '[{}, {}]'
console.log(JSON.stringify(responses));
我可以通过数据库确认API调用正在运行,因为AWS RDS性能指标显示DB查询正在运行,我还可以确认API本身通过NewRelic以200的响应,这就是为什么我的直觉是我没有正确使用GAS/UrlFetchApp.fetchAll()
因此,我想知道:
.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));