我有一个帖子集合和一个用户集合。在返回帖子列表时,我希望解析对用户的引用。这意味着对用户的每一行进行异步调用。当monk返回一个promise时,它会返回响应为"complete“或"success”的内容。Q期望一些响应"then“的东西。我需要使用Q.all来等待所有用户被吸引到帖子中,但我不能让它很好地发挥monk的promise风格。
这是我的尝试。
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");
});
});
};发布于 2014-02-13 04:17:30
只是为了外面的所有人。这是一种解决方案,也许不是最好的。
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");
});
});https://stackoverflow.com/questions/19777646
复制相似问题