让和尚与Q.all一起玩得很好

时间:2013-11-04 21:38:17

标签: node.js promise

我有一系列帖子和一组用户。返回帖子列表时,我想解析对用户的引用。这意味着为用户的每一行进行异步调用。当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");
        });
    });
};

1 个答案:

答案 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");
        });
    });