2

我想从我的 zapier 代码中进行 3 个不同的 api 调用,在变量中获取它们的返回并将它们合并。我不知道该怎么做。它会像:

var urls = [apiUrl1, apiUrl2, apiUrl3];
var output = [];

for ( i = 0; i < urls.length; i++ ) {
    output[i] = fetch( urls[i] );
}

这是一个示例代码。我无法得到对输出的响应,它只得到一个空白对象 {}。将获取返回值保存在输出数组中的过程是什么?

4

2 回答 2

7

显然,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);

这可能不是最干净的解决方案,但它对我有用。干杯!

于 2017-02-16T19:19:34.557 回答
2

你需要复习两件事:

  1. Promise - 尤其是 Promise.all() - 有很多关于它的内容。
  2. 异步返回数据的回调。我们的帮助文档对此进行了描述。

您的代码失败的主要原因是因为您假设 fetch 立即发生。在 JavaScript 中,情况并非如此——它发生异步,您必须使用承诺和回调等待它们完成,然后再通过回调返回输出!

于 2016-08-27T06:27:51.893 回答