2015-04-28 19 views
1

Visit.js使用async.js - 請注意,folloup.id指0或 「n」 訪問(如樹)與node.js的

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(訪問,功能(參觀,回調)」 執行

「visit.followup.forEach」 客戶端之前完成。 findById執行。

回答

1

的forEach並行執行,使forEachClient.findById之前完成。

所以你ç使用eachSeries而不是forEach

+0

非常感謝Subburaj。 – shibata