2017-05-04 18 views
0

我有下面的代碼,它使用Mongoose和Bluebird作爲貓鼬的承諾提供程序。我試圖實現的是在Promise.all()解決時返回的貓鼬文檔數組的每個元素上調用Model#save,如下所示。這段代碼不起作用,我的猜測是,當我打電話給doc.save()時,我沒有在一個被認爲是貓鼬模型實例的對象上做這件事。我怎樣才能解決這個問題?Mongoose:如何調用模型#保存由解析的Promise.all()返回的文檔?

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

@JohnnyHK所以,忽略了函數的第一行提供的結果.map(),doc.save()調用應該工作? –

回答

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