Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose嵌套使用Q填充不工作_Node.js_Mongodb_Mongoose_Q - Fatal编程技术网

Node.js Mongoose嵌套使用Q填充不工作

Node.js Mongoose嵌套使用Q填充不工作,node.js,mongodb,mongoose,q,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( ag

我正在学习承诺,我正在尝试使用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);
  });
};
这些层没有按顺序运行

您的主要问题是,您没有将回调传递给第一个
然后是
,而是传递调用的结果。那
Q()。那么(layerOne(aggr_data))
应该是

Q(aggr_data).then(layerOne).then(…)
或者干脆

layerOne(aggr_data).then(…)

IIRC,如果你得到了承诺,你不需要向
populate
传递任何回调。你希望
layerTree
在其函数体中使用
snippet
popsippet
吗?@Bergi,我很快就注意到了错误。谢谢你指出这一点。也摆脱了回调,它工作得很好。