我有以下代码使用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();
});
});
答案 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();
});
});