我想从我的zapier代码中做3个不同的api调用,获取变量的返回值并合并它们。我无法弄清楚如何做到这一点。它会像:
var urls = [apiUrl1, apiUrl2, apiUrl3];
var output = [];
for ( i = 0; i < urls.length; i++ ) {
output[i] = fetch( urls[i] );
}
这是一个示例代码。我无法获得对输出的响应,它只获得一个空白对象{}。在输出数组中保存获取返回值的过程是什么?
答案 0 :(得分:6)
显然,Zapier的人们不喜欢为这个代码复杂程度提供工作示例或任何类型的文档......这是一个有效的例子:
var promises = [];
for (var i = urls.length - 1; i >= 0; i--) {
promises.push(fetch(urls[i]));
}
Promise.all(promises).then(function(res){
var blobPromises = [];
for (var i = res.length - 1; i >= 0; i--) {
blobPromises.push(res[i].text());
}
return Promise.all(blobPromises);
}).then(function(body){
var output = {id: 1234, rawData: body};
callback(null, output);
}).catch(callback);
这可能不是最干净的解决方案,但它对我有用。干杯!
答案 1 :(得分:2)
您需要了解的两件事情:
您的代码失败的主要原因是您假设提取立即发生。在JavaScript不是这种情况下 - 它发生Async,你必须使用promises和callbacks等待它们完成后再通过回调返回输出!