Mongoose:如何调用模型#保存解析的Promise.all()返回的文档?

时间:2017-05-04 20:32:05

标签: mongoose bluebird

我有以下代码使用Mongoose和Bluebird作为mongoose的承诺提供者。我想要实现的是在Model#save结算时返回的mongoose文档数组的每个元素上调用Promise.all(),如下所示。这段代码不起作用,我的猜测是,当我调用doc.save()时,我没有在被识别为Mongoose Model实例的对象上执行此操作。我该如何解决这个问题?

promises = [
  User.findById(userId).exec(),
  Post.findById(postId).exec()
];

var promisedDocs = Promise.all(promises)  // Should resolve to [{ user: {} }, {post: {} }]
  .then(function(results) {
    results.map(function(result) {
      // Extract the first property of object in array element.
      var doc = result[Object.keys(result)[0]];
      doc.someArrayProp.push(someValue);
      doc.save();
   });
});

1 个答案:

答案 0 :(得分:0)

Promise.all返回的承诺将解析为[user, post],因此您可以直接操作results.map回调中的文档:

var promisedDocs = Promise.all(promises)  // Resolves to [user, post]
  .then(function(results) {
    results.map(function(doc) {
      doc.someArrayProp.push(someValue);
      doc.save();
   });
});