【问题标题】:Get monk to play well with Q.all让和尚玩好Q.all
【发布时间】:2014-02-13 04:17:30
【问题描述】:

我有一组帖子和一组用户。返回帖子列表时,我想解析对用户的引用。这意味着对每一行用户进行异步调用。当和尚返回一个承诺时,它返回一个响应“完成”或“成功”的东西。 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");
        });
    });
};

【问题讨论】:

    标签: node.js promise


    【解决方案1】:

    仅适用于其他所有人。这是一种解决方案,也许不是最好的。

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

    【讨论】:

      猜你喜欢
      • 2017-08-31
      • 2014-03-18
      • 1970-01-01
      • 2011-09-14
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多