Мне нравится синтаксис асинхронных функций лучше, чем обещаний, но я использую оба в зависимости от ситуации.
Вот пример запуска функций по порядку перед переходом к следующей функции:
async.waterfall([
function(callback1) {
//Do some work, then callback
if (error) {
callback1(errorGoesHere,null);
} else {
callback1(null,successMessageGoesHere);
}
},
function(callback2) {
//Do some work, then callback
if (error) {
callback2(errorGoesHere,null);
} else {
callback2(null,successMessageGoesHere);
}
}
], function (error, success) {
if (error) {
//show an error
}
//all good return the response, etc.
});
Если что-то в этих функциях завершается ошибкой, он автоматически вызывает функцию завершения для обнаружения ошибки.