Какой подход следует использовать для отклонения Обещания, если функция внутри него (в моем случае, setTimeout ()) выдает ошибку
Асинхронный обратный вызов никогда не должен вызывать исключение.Ваша функция, которую вы пытаетесь обещать (setTimeout
), либо генерирует синхронное исключение (которое обрабатывает new Promise
), либо вызывает обратный вызов.В обратном вызове вы должны позвонить resolve
или reject
и сделать это без исключения.
Если вы хотите сделать дополнительные действия в обратном вызове (помимо вызова resolve
/ reject
),вещи, которые могут вызвать исключение: не !
new Promise
должен заключать в себе только непосредственную функцию, которую вы хотите обещать, и ничего больше.Делайте больше вещей в then
обратных вызовах, которые связаны с обещанием - then
будет прекрасно обрабатывать исключения в своем обратном вызове:
function promiseFunc() {
return new Promise(resolve => {
setTimeout(resolve, 1000);
// ^^^^^^^ nothing can go wrong in here
}).then(() => {
throw "setTimeout's callback error";
// ^^^^^ here, it will lead to a rejection
return "resolution";
});
}