【问题标题】:Mongoose: How to call Model#save on docs returned by resolved Promise.all()?Mongoose:如何在已解决的 Promise.all() 返回的文档上调用 Model#save?
【发布时间】:2017-10-03 04:31:17
【问题描述】:

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

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();
   });
});

【问题讨论】:

  • @JohnnyHK 那么,忽略提供给 results.map() 的函数的第一行,doc.save() 调用应该可以工作吗?

标签: mongoose bluebird


【解决方案1】:

Promise.all返回的promise会解析为[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();
   });
});

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2020-07-18
    • 1970-01-01
    • 2019-09-26
    • 2018-05-11
    • 1970-01-01
    相关资源
    最近更新 更多