使用 Q 的猫鼬嵌套填充不起作用
Posted
技术标签:
【中文标题】使用 Q 的猫鼬嵌套填充不起作用【英文标题】:Mongoose Nested Populate using Q not working 【发布时间】:2015-10-06 10:29:00 【问题描述】:我正在学习 promise,我正在尝试使用 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);
);
;
【问题讨论】:
IIRC,如果你得到了一个承诺,你不应该将任何回调传递给populate
。
您希望layerThree
在其函数体中使用snippet
或popSnippet
?
@Bergi,我很快就注意到了这个错误。感谢您指出。也摆脱了回调,它工作得很好。
【参考方案1】:
图层不按顺序运行
您的主要问题是您没有将回调传递给第一个then
,而是调用的结果。 Q().then(layerOne(aggr_data))
应该是
Q(aggr_data).then(layerOne).then(…)
或者干脆
layerOne(aggr_data).then(…)
【讨论】:
以上是关于使用 Q 的猫鼬嵌套填充不起作用的主要内容,如果未能解决你的问题,请参考以下文章