mongoose批量保存与承诺
我正在探索使用q而不是asynchronous – 然后我遇到了这里解决的问题:
mongooseJS承诺? 或者如何pipe理批量保存
如果我使用q,这个答案会是什么?
如果docs[i].save()
没有返回promise,这个代码实际上可能不工作。
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解决scheme遇到的问题的评论。 这是我最后(刚刚添加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); });