Я узел.js noob, пытающийся использовать async.waterfall. У меня проблемы с последней задачей массива водопада до окончательного метода обратного вызова.TypeError: объект не является функцией с async.waterfall
В приведенном ниже примере передается обратный вызов doSomethingAsync
, но когда я хочу выполнить обратный вызов внутри doSomethingAsync
, я получаю TypeError: object is not a function
. Я не понимаю. Спасибо за ваши мысли
EDIT:
Первая задача водопада является создание документа Монго. Обратный вызов функции 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
@NathanZ во второй функции водопада, первым аргументом должен быть результат, который передается на обратный вызов первой функции. В этом случае это сохраненный сеанс. Вторая функция должна быть 'function (savedSession, callback) {...' – cdbajorin
Из чтения [кода мангуста] (https://github.com/LearnBoost/mongoose/blob/dd4f05dbeb9cd144071209f38a465e86377d9164/lib/model.js#L163), похоже, что функция, переданная в '.save()', фактически дается 3 аргумента: объект ошибки (если есть), сохраненная модель и numberAffected. Поэтому я думаю, что ваша вторая функция должна иметь подпись 'function (savedSession, numAffected, callback) {'. – mscdex