【发布时间】:2015-11-23 14:20:30
【问题描述】:
我遇到了一个问题,我不确定要采取什么步骤来解决它。现在所有数据都被正确检索但是 responseCallback 永远不会触发,因此我没有到达 res.json 与响应数组的调用。这里的任何指导将不胜感激!谢谢。
为了澄清问题在于 aysnc.each 回调。
var updatedBusinesses = [];
googleplaces.radarSearch({location:"lat,long",radius:"10000",keyword:"keywordhere"},function(err,response){
if(err){return next(err);}
async.each(response.results,function(currResponse,responseCallback){
Business.findOne({"placesId":currResponse.place_id,"claimed":true}).populate({path:'services',select:''}).exec(function(err,business){
if(err){return next(err);}
if(business !== null){
Service.populate(business.services,{path:'employees',select:'_id appointments firstName lastName username avatarVersion'},function(err,newBusiness){
if(err){return next(err);}
googleplaces.placeDetailsRequest({placeid:business.placesId},function(error,placesResult){
if(error){return responseCallback(error);}
console.log("RESULT OF THE GOOGLE PLACES DETAIL SEARCH")
placesResult.result.info = business;
updatedBusinesses.push(placesResult.result);
// Here the data is populated and correct.
// console.log(updatedBusinesses)
responseCallback();
});
})
}
})
},function(err){
if(err){return next(err);}
console.log("called")
res.json(updatedBusinesses);
})
})
这是我希望将更新的业务信息返回给客户的地方,但是这永远不会触发。
},function(err){
if(err){return next(err);}
console.log("called")
res.json(updatedBusinesses);
})
})
【问题讨论】:
-
这里有多个回调。你能确定哪些没有被解雇吗?
-
是的,抱歉,async.each responseCallback
-
你是否到达了这个``` // console.log(updatedBusinesses)``,如果你取消注释它会给你正确的结果吗?
-
是的,代码到达了该语句并且确实到达了。这正是我想返回给客户端的数据。
-
那么你的回调应该是 responseCallback(null, updatedBusinesses);
标签: node.js asynchronous express mongoose mongoose-populate