我有一系列帖子和一组用户。返回帖子列表时,我想解析对用户的引用。这意味着为用户的每一行进行异步调用。当monk返回一个promise时,它会返回响应“complete”或“success”的内容。 Q期待某些事情回应“当时”。我需要使用Q.all来等待所有用户被提取到帖子中,但我不能让它与monk的承诺风格很好地发挥。
这是我的尝试。
exports.posts = function (req, res) {
req.posts.find()
.complete(function(err, posts) {
handle(err, res, posts);
var postsWithUsers = posts.map(function(post) {
return req.users.findOne({_id: post.userId}).complete(function(err, result) {
post.user = result;
});
});
Q.all(postsWithUsers.map(function(monkPromise) {
monkPromise.then = monkPromise.complete
}), function(err, results) {
console.log("done with all posts");
});
});
};
答案 0 :(得分:0)
只为那里的其他人。这是一种解决方案,也许不是最好的解决方案
exports.posts = function (req, res) {
req.posts.find()
.complete(function(err, posts) {
handle(err, res, posts);
var postsWithUsers = posts.map(function(post) {
var deferred = Q.defer();
return req.users.findOne({_id: post.userId}).complete(function(err, result) {
post.user = result;
deferred.resolve(result);
});
return deferred.promise;
});
Q.all(postsWithUsers, function(err, results) {
console.log("done with all posts");
});
});