Асинхронный модуль nodejs: https://github.com/caolan/async предоставляет 2 похожих метода async.waterfall
и async.series
.
В чем разница между ними?
javascript
node.js
asynchronous
node-async
Брюс Доу
источник
источник
waterfall
неseries
возвращается. Ожидается, что какой бы результат ни был, он будет использован в необязательном параметре обратного вызова.Обе функции передают возвращаемое значение каждой функции следующей, а затем, когда это сделано, вызовут основной обратный вызов, передав его ошибку, если произойдет ошибка.
Разница в том
async.series()
, что после завершения серии все результаты передаются в основной обратный вызов.async.waterfall()
передаст основному обратному вызову только результат последней вызванной функции.источник
async.waterfall()
имеет дело сaction that relies on the previous outcome
.async.series()
имеет дело с действием, которое хочетsee all the result at the end
источник
Я считаю async.waterfall вредным, потому что его сложно реорганизовать после написания, а также он подвержен ошибкам, поскольку, если вы предоставите больше аргументов, другие функции сильно изменят подпись.
Я настоятельно рекомендую
async.autoInject
async.waterfall в качестве отличной альтернативы. https://caolan.github.io/async/autoInject.js.htmlЕсли вы все же решите использовать async.waterfall, я рекомендую хранить все в одном объекте, чтобы вашим функциям не приходилось изменять длину / подписи, например:
предупреждение: это плохой шаблон
не делайте этого вышеописанным способом. Это гораздо лучший шаблон для использования:
таким образом вы не будете выдергивать волосы, пытаясь убедиться, что аргументы функции имеют правильную длину. Первая функция принимает только один аргумент - обратный вызов. Все остальные должны принимать два аргумента - значение и обратный вызов. Придерживайтесь шаблона, и вы останетесь в здравом уме!
источник