【发布时间】:2020-02-22 19:58:18
【问题描述】:
我想调用几个 REST API 来获取我使用的数据。我希望所有 REST 调用都完成,然后进行一些计算。下面的代码有效,但我不太喜欢它。尤其是当一个站点返回错误时,要查看它的来源并不容易。我宁愿单独处理每个呼叫,然后最后“等待”所有呼叫完成。这样,如果某个 REST 调用不起作用,我也可以进行部分计算
const rp = require('request-promise');
var site1 = {
uri: 'https://www.site1.com/api/v1/somedata.json',
json: true
};
var site2 = {
uri: 'https://www.site2.com/api/v1/somedata.json',
json: true
};
var site3 = {
uri: 'https://www.site3.com/api/v1/somedata.json',
json: true
};
var promises = [];
promises.push(rp(site1));
promises.push(rp(site2));
promises.push(rp(site3));
Promise.all(promises).then(data => {
console.log(data);
// fetch all data from data variable and do calulation
}, err => {
console.log('error')
});
【问题讨论】:
-
Promise.all 要么全有,要么全无。您需要单独处理它们。
-
你可以使用
Promise.allSettled(),它会在所有给定的promise都被解决或拒绝后解决。
标签: javascript node.js promise request