2016-10-31 136 views
0

我有一個var範圍的問題。MongoDB .findOne範圍

var max; 
    ClassModel.findOne({ class: '1a' }, function (err, class1a) { 
     if (err) return handleError(err); 
     max = class1a.members; 
     console.log(max); 
    }); 
console.log(max); 

爲什麼第一個日誌記錄適當的值,但第二個日誌未定義?

回答

1

第二個console.log顯示undefined,因爲貓鼬的findOne是異步的。當你顯示第一個console.log時,結果已被處理,第二個沒有。

Mongoose異步操作,如.save()和查詢,返回 Promises/A +符合承諾。這意味着你可以像MyModel.findOne({}),然後(),並且產生MyModel.findOne({}).exe() (如果你使用的是co)來做 。

一件事,你可以做的是檢查,當它完成,像..

var max; 
var query = ClassModel.findOne({ class: '1a' }, function (err, class1a) { 
    if (err) return handleError(err); 
    return class1a.members; 
}); 

query.then(function(data) { 
    console.log(data); // will show class1a.members value 
}); 

Docs

+0

謝謝,它的工作原理!如果我想要返回最大值並將其用於不同的功能而不是console.log,該怎麼辦? – Hadzik

+0

我再次編輯,看看。 –