【问题标题】:Using fetch in a loop in code by zapierzapier 在代码中的循环中使用 fetch
【发布时间】:2017-01-03 19:47:10
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: zapier


    【解决方案1】:

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

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

    【讨论】:

    • 我明白了:Promise.all 不是函数
    • @Eric - 1. 您是否尝试在 zap 中将其作为 javascript 代码操作运行? Zapier 应该仍然具有对 Promise.all() 的内置支持。如果您在 Zapier 之外尝试此操作,则需要添加 Promise 包作为要求 npmjs.com/package/promise。 2. Promise.all() 需要一个数组。您是否将数组传递给 Promise.all()? 3. 如果不是 2 或 3,那么我需要更多关于您的使用情况的信息。
    • @Eric - 我只是重新运行了上面的例子,没有问题。 Promise.all() 需要一个数组。您是否将数组传递给 Promise.all()?
    【解决方案2】:

    你需要复习两件事:

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 1970-01-01
      • 2020-04-03
      • 2014-01-12
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2020-11-12
      • 2020-01-30
      相关资源
      最近更新 更多