Самое простое изменение - просто return
внутренние обещания. Это приведет к тому, что их отклонения распространятся вверх до одиночного .catch()
, например:
function1().then(() => {
return function2().then(() => {
return function3().then(() => {
})
})
}).catch((err) => {
console.log(err);
})
Но это последовательное вложение обещаний не совсем идеально (некоторые называют это анти-шаблоном). . Если вы действительно хотите, чтобы все было упорядочено в наши дни, и вы используете современную среду JS, тогда вы должны упорядочить вещи и отлавливать ошибки в одном месте с помощью await
:
async someFunction() {
try {
let val1 = await function1();
let val2 = await function2();
let val3 = await function3();
} catch(e) {
// catch any rejections from the above three `await` statements here
console.log(e);
}
}
Используя также await
значительно упрощает просмотр потока кода и сбор результатов нескольких асинхронных вызовов в одной области.
Без await
вы также можете сгладить исходный код:
function1().then(() => {
return function2().then(() => {
})
}).then(() => {
return function3().then(() => {
})
}).catch((err) => {
console.log(err);
})
Но большинство людей сочтут реализацию await
более простой.