Я считаю async.waterfall вредным, поскольку после написания кода его трудно реорганизовать, а также он подвержен ошибкам, поскольку, если вы предоставите больше аргументов, другие функции сильно изменят сигнатуру.
Я настоятельно рекомендую async.autoInject
как отличную альтернативу async.waterfall.https://caolan.github.io/async/autoInject.js.html
Если вы решите использовать async.waterfall, я рекомендую хранить все в одном объекте, чтобы вашим функциям не приходилось изменять длину / подписи, например:
предупреждение: это плохая схема
async.waterfall([
cb => {
cb(null, "one", "two");
},
(one, two, cb) => {
cb(null, 1, 2, 3, 4);
},
(one,two,three,four,cb) => {
// ...
}
])
не делайте этого вышеописанным способом.Это гораздо лучший шаблон для использования:
async.waterfall([
cb => {
cb(null, {one:"one", two:"two"});
},
(v, cb) => {
cb(null, [1, 2, 3, 4]);
},
(v,cb) => {
// ...
}
])
, так что вы не будете тянуть свои волосы, пытаясь убедиться, что аргументы функции имеют правильную длину.Первая функция принимает только один аргумент - обратный вызов.Все остальные должны принимать два аргумента - значение и обратный вызов.Придерживайтесь шаблона, и вы останетесь в здравом уме!