我只是在完成forEach循环中的所有promise时才尝试返回结果(feedItemsArray),但是在返回所有promise之前执行代码。确保事先退回所有承诺的正确方法是什么?
function retrieveFeed(req, res) {
return FeedItem.find().exec()
.then(function(feedItems) {
var feedItemsArray = [];
feedItems.forEach(function(feedItem){
// Do some stuff on feedItem
return Comment.find({feedItem_id : feedItem._id}).exec()
.then(function(comments){
// Do some stuff on comments
return feedItemsArray.push(feedItem);
})
})
return prepareJSONObject(feedItemsArray);
})
.then(handleEntityNotFound(res))
.then(respondWithResult(res))
.catch(handleError(res));
}
答案 0 :(得分:3)
每当你想在数组上使用promises时,你应该将它们添加到数组中,然后使用Promise.all()来得到结果。
例如:
var arr = ["url1", "url2"];
var promises = [];
// Request is request-promise (returns a promise)
arr.forEach(function(url) {
promises.push(request.get(url));
});
Promise.all(promises).then(function(results) {
// results is an array of results for each url
}).catch(function(err){
// Even if one fails, you end up here
});