0

我有一组帖子和一组用户。返回帖子列表时,我想解决对用户的引用。这意味着对每一行用户进行异步调用。当和尚返回一个承诺时,它返回一个响应“完成”或“成功”的东西。Q 期望对“then”做出响应。我需要使用 Q.all 来等待所有用户都被拉入帖子,但我不能让它与和尚的承诺风格很好地配合。

这是我的尝试。

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

1 回答 1

0

Just for everyone else out there. This is one solution, perhaps not the best.

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");
        });
    });
于 2014-02-12T20:17:30.157 回答