Mongoose批量保存与承诺

时间:2013-07-02 02:17:41

标签: javascript node.js asynchronous mongoose promise

我正在探索使用q而不是异步 - 然后我遇到了这里讨论的问题:

Mongoose JS promises? Or how to manage batch save

如果我使用q,这个答案会是什么?

2 个答案:

答案 0 :(得分:2)

请参阅我对使用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);
});

答案 1 :(得分:-1)

请参阅@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);
  });

我们在循环中一次启动所有操作,但我们不等待它们中的任何一个完成,因此它们并行运行。我们向数组添加一个promise(对结果来说就像占位符一样)。然后我们等待承诺数组中的所有承诺完成。