我正在调用第三方api,我在收集所有返回时遇到问题并将其作为1个数组返回到我的API中。我可以看到我成功拨打电话他们正在返回。由于asynch,最终数组在填充之前返回。有一个优雅的解决方案来处理这个?
var itemIds = ['1','2','3','4','5','6']
exports.getItemData = function getItemData(req, res) {
var items = [];
var errors = [];
for(var itemId in itemIds) {
var options = {
uri: itemEndpoint + itemIds[itemId] +'/',
json: true
};
RequestPromise(options).then(function (item){
console.log(item);
items.push(item);
}).catch(function(err){
console.log(err)
errors.push(err);
});
};
res.type('application/json');
res.json(items);
};
答案 0 :(得分:3)
RequestPromise(options)
Promises数组,然后使用Promise.all([array-of-promises]).then(function (<array-of-result-arrays>){})
。
因此,您重构的代码将如下所示:
var allPromises = [];
for(var itemId in itemIds) {
var options = {
uri: itemEndpoint + itemIds[itemId] +'/',
json: true
};
allPromises .push(RequestPromise(options));
}
//so now you have an array of promises in allPromises. Now when they all resolve:
Promise.all(allPromises).then(function (allResults){
console.log(allResults);
//do whatever with the results...
}).catch(function(err){
console.log(err)
errors.push(err);
});
我希望这会有所帮助。