通过node.js使用async.js

Visit.js – 注意folloup.id引用0或“n”访问(如树)

var visitSchema = new Schema({ code : {type: String, trim: true, required: false, default: ""}, Client : { id: {type: Schema.Types.ObjectId, ref: 'Client'}, }, attendant : [{ name : {type: String, trim: true, required: false, default: ""}, }], followup : [{ id : {type: Schema.Types.ObjectId, ref: 'Visit'} }], }); 

Client.js

 var clientSchema = new Schema({ name: {type: String, trim: true, required: false, default: ""} }); 

所以,我试图做到这一点,但它不工作。 为什么不?

 Visit.find(function(err, visits) { var visitCards = new Array(); async.eachSeries(visits, function(visit, callback) { var visitCard = new VisitCard(); async.series([ function(callback){ Client.findById(visit.Client.id, function(err, client) { visitCard.client = client.name; callback(); }); }, function(callback){ visit.followup.forEach(function(followup){ Client.findById(followup.Client.id, function(err, lfollowup) { var pfollowup = new visitCard.followup(); ... visitCard.followup.push(pFollowup); callback(); }); }); } ], function(err, results){ ... visitCards.push(visitCard); }); }, function(err){ res.render('visits/index', { visitCards: visitCards}); }); }); 

看起来:

在“async.eachSeries(访问,函数(访问,callback)”执行后,客户的callback返回。

“visit.followup.forEach”在Client.findById执行之前完成。

forEach并行执行,以便forEachClient.findById之前完成。

所以你可以使用eachSeries而不是forEach