我的var movieRecommendation
正在從來自Mongo DB的數據中填充。問題是貓鼬Movie.findOne()
電話是asycn電話,它不允許我得到我最後填充的movieRecommendation
,我需要發回作爲迴應。使用查詢查詢Mongoose異步調用問題
exports.getRecommendation=function(req,res){
var movieRecommendation = [];
var id=req.params.id;
console.log('----- Get User Recommendation - ' + id);
var url = 'http://52.8.48.113:8080/recommender-server/recommender/v1/recommendations/'+id+'.do';
//make http get request
request({
url: url,
json: true
}, function (error, response, recommendations) {
// res.json(recommendations);
if (!error && response.statusCode === 200) {
recommendations.forEach(function(entry) {
**Movie.findOne({'id':parseInt(entry.itemId)},function(err, movieData){**
entry.movie = movieData;
movieRecommendation.push(entry);
//console.log('rec', movieRecommendation);
console.log(movieRecommendation.length);
});
});
}
console.log("====Final========"+movieRecommendation.length);
//Output = 0
});
res.json(movieRecommendation); // Here movieRecommendation is coming as black Array
};
請讓我知道我能得到最後填充在結束movieRecommendation
變種,以使其可用於響應。
不要使用常規'for'循環來執行異步調用,因爲它們不會等待異步調用返回。嘗試['async.each'](https://www.npmjs.com/package/async#each)或實現promise的模塊,如'q'(https://www.npmjs.com/package/q )或「bluebird」(https://www.npmjs.com/package/async#each)。 –