我是一个尝试使用async.waterfall的node.js noob。 我有问题从瀑布数组的最后一个任务到最终的回调方法。
在下面的示例中,我将回调传递给doSomethingAsync
,但是当我想在doSomethingAsync
内执行回调时,我得到TypeError: object is not a function
。我不明白。谢谢你的想法
编辑:
瀑布的第一项任务是创建一个Mongo文档。 save()函数的回调是function(err){...}
。
var session = createSession(); // session is a Mongoose model
async.waterfall([
function (callback) {
...
session.save(callback); // Model.save(function(err){...}
},
function (callback) {
doSomethingAsync(session, callback)
}
], function (err, session) {
});
function doSomethingAsync(session, callback){
doSomething(function(err){
callback(err,session);
}
}
callback(err,session);
^
TypeError: object is not a function
答案 0 :(得分:7)
我的猜测是问题在于您已删除的代码。更具体地说,你可能在你展示调用doSomethingAsync()
之前的瀑布中有一个函数。
async.waterfall()
的工作方式是将传递给回调的任何参数传递给函数列表中的下一个函数。所以前一个函数可能正在执行类似callback(null, { foo: 'bar' })
的操作,而下一个函数中的callback
参数实际上是{ foo: 'bar' }
,第二个参数是真正的回调。这实际上取决于您之前传递给回调的参数数量。
假设您只传递了1个项目,则可以从以下位置更改函数定义:
function (callback) {
doSomethingAsync(session, callback)
}
为:
function (someResult, callback) {
doSomethingAsync(session, callback)
}