async.apply for mongodb 聚合函数失败
async.apply for mongodb aggregate function fails
我尝试借助异步库将我的回调地狱代码转换为更加结构化的代码。现在,我有以下代码:
db.collection('campaigns').aggregate(pipeline, function(err, campaigns) {
capCampaigns(campaigns, function(err, cappedCampaigns) {
// etc
}
});
我改写为
async.waterfall([
async.apply(db.collection('campaigns').aggregate, pipeline),
capCampaigns,
// etc
], function(err, result) {
}
遗憾的是,async.apply
失败了:
TypeError: Cannot read property 's' of null
at Collection.aggregate (/home/beryllium/sitesrv/node_modules/mongodb/lib/collection.js:2458:35)
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:760:23
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:166:37
at fn (/home/beryllium/sitesrv/node_modules/async/lib/async.js:746:34)
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:1213:16
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:166:37
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:706:43
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:167:37
at Object.async.waterfall (/home/beryllium/sitesrv/node_modules/async/lib/async.js:710:44)
at chooseCampaignAndBanner (/home/beryllium/sitesrv/routes/banner.js:207:9)
我做错了什么?
附加信息:
节点版本:5.7.1
NOdeJS 的 MonogDB 驱动程序:2.1.2
mongo失败的行:
// Build the command
var command = { aggregate : this.s.name, pipeline : pipeline};
此处的代码将立即将管道应用于聚合方法,而且,它无法在您的代码中进行回调。试试这个:
async.waterfall(
[
function(cb) { return db.collection('campaigns').aggregate(pipeline, cb) },
capCampaigns,
],
function(err, result) {
}
)
我尝试借助异步库将我的回调地狱代码转换为更加结构化的代码。现在,我有以下代码:
db.collection('campaigns').aggregate(pipeline, function(err, campaigns) {
capCampaigns(campaigns, function(err, cappedCampaigns) {
// etc
}
});
我改写为
async.waterfall([
async.apply(db.collection('campaigns').aggregate, pipeline),
capCampaigns,
// etc
], function(err, result) {
}
遗憾的是,async.apply
失败了:
TypeError: Cannot read property 's' of null
at Collection.aggregate (/home/beryllium/sitesrv/node_modules/mongodb/lib/collection.js:2458:35)
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:760:23
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:166:37
at fn (/home/beryllium/sitesrv/node_modules/async/lib/async.js:746:34)
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:1213:16
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:166:37
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:706:43
at /home/beryllium/sitesrv/node_modules/async/lib/async.js:167:37
at Object.async.waterfall (/home/beryllium/sitesrv/node_modules/async/lib/async.js:710:44)
at chooseCampaignAndBanner (/home/beryllium/sitesrv/routes/banner.js:207:9)
我做错了什么?
附加信息: 节点版本:5.7.1 NOdeJS 的 MonogDB 驱动程序:2.1.2
mongo失败的行:
// Build the command
var command = { aggregate : this.s.name, pipeline : pipeline};
此处的代码将立即将管道应用于聚合方法,而且,它无法在您的代码中进行回调。试试这个:
async.waterfall(
[
function(cb) { return db.collection('campaigns').aggregate(pipeline, cb) },
capCampaigns,
],
function(err, result) {
}
)