Node.js:forEach包含Promise在承诺完成之前完成

我试图返回一个结果(feedItemsArray)只有在forEach循环内的所有承诺都满足,但代码在所有承诺返回之前执行。 什么是确保所有承诺事先被返回的正确方法?

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)); } 

每当你想使用数组的promise时,你应该把它们添加到数组中,然后使用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 });