我使用Q代替的異步探索 - 然後我跑過問題解決在這裏:貓鼬批量保存與承諾
Mongoose JS promises? Or how to manage batch save
什麼會這個答案已經如果我是用品質?
我使用Q代替的異步探索 - 然後我跑過問題解決在這裏:貓鼬批量保存與承諾
Mongoose JS promises? Or how to manage batch save
什麼會這個答案已經如果我是用品質?
查看帖子@rquinn,如果docs[i].save()
未返回承諾,則此代碼可能實際上不起作用。
var tasks = [];
for (var i=0; i < docs.length; i++) {
tasks.push(docs[i].save());
}
Q.all(tasks)
.then(functions, function(results) {
console.log(results);
}, function (err) {
console.log(err);
});
我們在循環中一次啓動一個操作,但我們不等待它們中的任何一個完成,因此它們並行運行。我們爲數組添加一個承諾(就像結果的佔位符一樣)。然後,我們等待承諾數組中的所有承諾完成。
請參閱我對使用ForbesLindesay的解決方案遇到的問題的評論。這裏是我結束了(剛剛添加ninvoke返回一個承諾):
var tasks = [];
for (var i=0; i < docs.length; i++) {
tasks.push(Q.ninvoke(docs[i], "save"));
}
Q.all(tasks)
.then(functions, function(results) {
console.log(results);
}, function (err) {
console.log(err);
});
我們確定這可以工作嗎?保存不會返回一個承諾,它是異步的,所以我認爲Q.all.then()將在記錄實際插入之前被調用。也許這對你來說不是問題。我在Q.all.then()中調用了process.exit,並沒有插入記錄。 –
啊,我以爲'.save'已經回覆了一個承諾。如果不是,那麼你的解決方案確實是正確的。 – ForbesLindesay