Обработка ошибок в Promise
Давайте теперь научимся обрабатывать исключительные ситуации, случившиеся внутри промиса. В случае возникновения такой ситуации мы должны отклонить промис с помощью специальной функции отклонения, которая автоматически попадает во второй параметр функции промиса. Внутри функции промиса мы должны вызвать resolve
, если все прошло штатно, либо reject
, если возникла исключительная ситуация:
let promise = new Promise(function (resolve, reject) {
setTimeout(function () {
let isError = false;
if (!isError) {
// данные промиса
resolve([1, 2, 3, 4, 5]);
} else {
// ваш текст ошибки
reject("error in promise");
}
}, 3000);
});
Затем в методе then
параметрами вы должны передать не одну, а две функции: первая сработает, если промис сработал штатно (зарезолвился), а вторая - если сработал с ошибкой (зареджектился):
promise.then(
function (result) {
// выведет результат промиса
console.log(result);
},
function (error) {
// выведет текст ошибки
console.log(error);
}
);
Принято в функцию reject передавать не строку с ошибкой, а объект с ошибкой:
let promise = new Promise(function (resolve, reject) {
setTimeout(function () {
// объект с ошибкой
reject(new Error("error in promise"));
}, 3000);
});
Можно также выбрасывать объекты с ошибками с помощью throw
- это будет эквивалентно передаче их в reject
:
let promise = new Promise(function (resolve, reject) {
setTimeout(function () {
throw new Error("error in promise"); // эквивалентно reject
}, 3000);
});