Mongoose Nested Populate使用Q无效

时间:2015-07-16 19:51:23

标签: node.js mongodb mongoose q

我正在学习承诺,我正在尝试使用Q来清理我的嵌套填充。

问题:图层不按顺序运行,结果数据不会传递到每个连续图层。

Q().then(layerOne(aggr_data))
  .then(layerTwo)
  .then(layerThree)

function layerOne(aggr_data) {
  var options = {
      path: '_video'
    , model: 'video'
  };
  return model_video.populate( aggr_data, options, function (err, snippet) {
    if (err) return next(err);
    return snippet;
  });
};

function layerTwo(snippet) {
  var commentOptions = {
      path: '_comments._author'
    , model: 'user'
  };
  return model_user.populate(snippet, commentOptions, function (err, popSnippet) {
    if (err) return next(err);
    return popSnippet;
  });
};

function layerThree(popSnippet) {
  var videoOptions = {
      path: '_video._chirps._comments'
    , model: 'comment'
  };
  return model_comment.populate(snippet, videoOptions, function (err, deepSnippet) {
    if (err) return next(err);
    next(deepSnippet);
  });
};

1 个答案:

答案 0 :(得分:2)

  

图层不按顺序运行

您的主要问题是您没有将回调传递给第一个then,而是通话结果。那个Q().then(layerOne(aggr_data))应该是

Q(aggr_data).then(layerOne).then(…)

或只是

layerOne(aggr_data).then(…)