我是一個node.js noob嘗試使用async.waterfall。 我有問題從瀑布陣列的最後一個任務到最終的回調方法。TypeError:對象不是具有async.waterfall的函數
在下面的示例中,我將回調傳遞給doSomethingAsync
,但是當我想在doSomethingAsync
內執行回調時,我得到TypeError: object is not a function
。我不明白。感謝您的想法
編輯:
瀑布的第一項任務是蒙戈文檔的創建。 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
我確實省略了瀑布的第一項任務。你可以看看編輯嗎?我明白'回調'是另一種類型的對象,但我不明白我的語法有什麼問題。 – znat 2015-02-09 13:31:34
@NathanZ在瀑布的第二個函數中,第一個參數需要是傳遞給第一個函數回調的結果。在這種情況下,它是保存的會話。第二個函數需要'function(savedSession,callback){...' – cdbajorin 2015-02-09 13:37:51
從閱讀[mongoose代碼](https://github.com/LearnBoost/mongoose/blob/dd4f05dbeb9cd144071209f38a465e86377d9164/lib/model.js#L163 ),看起來傳遞給'.save()'的函數實際上有3個參數:錯誤對象(如果有),保存的模型和numberAffected。所以我認爲你的第二個函數需要有'function(savedSession,numAffected,callback){'的簽名。 – mscdex 2015-02-09 14:35:05