Lệnh gọi lại của findOne () là không đồng bộ, nó được thực thi sau khi bạn kết xuất ngọc bích. Quá trình thực thi sẽ chuyển đến "TrackSession" trước khi biến người dùng nhận một giá trị mới.
Bạn nên đặt var html =... bên trong callback.
var user = null;
User.findOne({$and: [{"_id": advisorId}, {"role": "advisor"}]},{firstName:1,lastName:1, '_id':0}, function(err,userData,user) {
user = userData;
TrackSession.find({'advisor_id' : advisorId},fields,function(err, chatHistoryData) {
var jade = require('jade');
var html = jade.renderFile(appRoot+'/views/generatePDFHTML.jade', {'chatHistoryData': chatHistoryData,
'selectedOptions':selectedOptions,
'advisor':user,
'tableHeaders':tableHeaders
});
console.log(html); return false;
});
});