2015-07-05 222 views
0

我有下面的代碼返回數據的數組:不能填充與貓鼬

var array = []; 
Collection.findOne({'name' : 'FirstItem'}, function(err, result) { 
    if (err) throw err; 
    array.push(result); 
}); 

現在貓鼬返回結果,因爲它應該,但我不能將它添加到陣列 - 它仍然是空的。有什麼問題?

+1

你在哪裏檢查數組? 'Collection.findOne'不是'async'函數嗎? – fuyushimoya

+0

做'結果'包含數據嗎? – gypsyCoder

回答

0

如果你寫的代碼,如:

var array = []; 
Collection.findOne({'name' : 'FirstItem'}, function(err, result) { 
    if (err) throw err; 
    array.push(result); 
}); 
// Do something with the array. 
console.log(array); 

array將是空在那裏,因爲當你調用Collection.findOne,它需要連接到數據庫和檢索數據,這將花費的時間。

因爲沒有阻止你的繼承代碼,它不會停留在那裏等待接收結果,而是讓其他代碼仍然運行,並調用你獲取數據時傳遞的函數在那之前,你array將是空

你應該做的是移動你的邏輯需要使用array,在該回調,如:

var array = []; 
Collection.findOne({'name' : 'FirstItem'}, function(err, result) { 
    if (err) throw err; 
    array.push(result); 
    // Do something with the array. 
    console.log(array); 
}); 
+0

非常感謝,它現在可以工作。我不是一個後端專家,我對這些事情沒有太多經驗。 –