TypeError: object is not a function with async.waterfall
TypeError: object is not a function with async.waterfall
我是一个 node.js 菜鸟,正在尝试使用 async.waterfall。
从瀑布数组的最后一个任务到最终的回调方法我有问题。
在下面的示例中,我将回调传递给 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
我的猜测是问题出在您删除的代码上。更具体地说,您可能在瀑布中有一个函数,就在您显示的函数之前调用 doSomethingAsync()
.
async.waterfall()
的工作方式是它将传递给回调函数的任何参数传递给函数列表中的下一个函数。所以前一个函数可能正在做类似 callback(null, { foo: 'bar' })
的事情,而你在下一个函数中的 callback
参数实际上是 { foo: 'bar' }
而第二个参数是真正的回调。这实际上取决于您之前向回调传递了多少参数。
所以假设您只传递 1 个项目,您将更改函数定义:
function (callback) {
doSomethingAsync(session, callback)
}
至:
function (someResult, callback) {
doSomethingAsync(session, callback)
}
我是一个 node.js 菜鸟,正在尝试使用 async.waterfall。 从瀑布数组的最后一个任务到最终的回调方法我有问题。
在下面的示例中,我将回调传递给 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
我的猜测是问题出在您删除的代码上。更具体地说,您可能在瀑布中有一个函数,就在您显示的函数之前调用 doSomethingAsync()
.
async.waterfall()
的工作方式是它将传递给回调函数的任何参数传递给函数列表中的下一个函数。所以前一个函数可能正在做类似 callback(null, { foo: 'bar' })
的事情,而你在下一个函数中的 callback
参数实际上是 { foo: 'bar' }
而第二个参数是真正的回调。这实际上取决于您之前向回调传递了多少参数。
所以假设您只传递 1 个项目,您将更改函数定义:
function (callback) {
doSomethingAsync(session, callback)
}
至:
function (someResult, callback) {
doSomethingAsync(session, callback)
}