使用 Q 的猫鼬嵌套填充不起作用
Mongoose Nested Populate using Q not working
我正在学习 promises,我正在尝试使用 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);
});
};
The layers don't run in order
您的主要问题是您没有将回调传递给第一个 then
,而是传递调用的结果。 Q().then(layerOne(aggr_data))
应该是
Q(aggr_data).then(layerOne).then(…)
或者干脆
layerOne(aggr_data).then(…)
我正在学习 promises,我正在尝试使用 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);
});
};
The layers don't run in order
您的主要问题是您没有将回调传递给第一个 then
,而是传递调用的结果。 Q().then(layerOne(aggr_data))
应该是
Q(aggr_data).then(layerOne).then(…)
或者干脆
layerOne(aggr_data).then(…)