在 zapier 的代码循环中使用 fetch
Using fetch in a loop in code by zapier
我想从我的 zapier 代码中执行 3 个不同的 api 调用,在变量中获取它们的 return 并将它们合并。我不知道该怎么做。它将像:
var urls = [apiUrl1, apiUrl2, apiUrl3];
var output = [];
for ( i = 0; i < urls.length; i++ ) {
output[i] = fetch( urls[i] );
}
这是示例代码。我无法得到对输出的响应,它只得到一个空白对象 {}。将提取的 return 值保存在输出数组中的过程是什么?
您需要复习两件事:
- 承诺 - 特别是 Promise.all() - 有很多关于承诺的内容。
- 异步回调return数据。我们的帮助文档对此进行了描述。
您的代码失败的主要原因是您假设提取会立即发生。在 JavaScript 中情况并非如此 - 它发生异步,您必须使用承诺和回调来等待它们完成,然后 return 通过回调输出输出!
因为显然 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);
这可能不是最干净的解决方案,但对我有用。干杯!
我想从我的 zapier 代码中执行 3 个不同的 api 调用,在变量中获取它们的 return 并将它们合并。我不知道该怎么做。它将像:
var urls = [apiUrl1, apiUrl2, apiUrl3];
var output = [];
for ( i = 0; i < urls.length; i++ ) {
output[i] = fetch( urls[i] );
}
这是示例代码。我无法得到对输出的响应,它只得到一个空白对象 {}。将提取的 return 值保存在输出数组中的过程是什么?
您需要复习两件事:
- 承诺 - 特别是 Promise.all() - 有很多关于承诺的内容。
- 异步回调return数据。我们的帮助文档对此进行了描述。
您的代码失败的主要原因是您假设提取会立即发生。在 JavaScript 中情况并非如此 - 它发生异步,您必须使用承诺和回调来等待它们完成,然后 return 通过回调输出输出!
因为显然 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);
这可能不是最干净的解决方案,但对我有用。干杯!