2013-03-27 37 views
0

貓鼬會顯示一種奇怪的行爲。以下幾行代碼首先完全刪除一個集合,然後創建一個新對象,最後再次刪除集合。貓鼬不會從收藏品中移除物品

Model.remove().exec(); 
var obj = new Model({ name: 'my object' }); 
obj.save(); 
Model.remove().exec(); 

雖然第一刪除作品(我每次啓動程序時,收集被清空),第二個有沒有效果(當我查詢集合,對象是仍然存在)。我不知道這裏發生了什麼。

環境:Node.js的v0.8.20,MongoDB的v1.2.14和貓鼬V3.6.0

回答

5

你需要使用回調獲取串行操作。 node.js中的所有I/O都是異步的。這意味着可能是你的.save().remove().exec()所以第二.remove().exec()完成後,將保存發生較慢。您需要使用回調函數來進行適當的流量控制。深度嵌套的回調(AKA回調hell)方式看起來像這樣,但使用更多的命名函數或像async.js這樣的流控制庫將解決此問題。

Model.remove().exec(function (error) { 
    var obj = new Model({ name: 'my object' }); 
    obj.save(function (error) { 
     Model.remove().exec(); 
    }); 
}); 

隨意拋出一些錯誤處理。

2

我有這樣一段代碼,其確實在我的測試結束時被執行;

var clearDb = function(){ // Reset collections ProjectModel.remove().exec() .then(function() { console.log('Removed collection: Project'); }); };

然而,它不清除集合!它適用於另一種測試用例,它是一種不同的模型,並且可行!有任何想法嗎?我可以看到日誌