Давайте теперь научимся обрабатывать исключительные ситуации, случившиеся внутри промиса. В случае возникновения такой ситуации мы должны отклонить промис с помощью специальной функции отклонения, которая автоматически попадает во второй параметр функции промиса:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
...
}, 3000);
});
Внутри функции промиса мы должны вызвать
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); // выведет текст ошибки
}
);
Как правило, приведенный выше код записывают более компактно, вот так:
promise.then(function(result) {
console.log(result); // выведет результат промиса
}, function(error) {
console.log(error); // выведет текст ошибки
});
Сделайте асинхронный код, который будет генерировать
случайные числа от 0
до 5
.
Оберните все это в промис. Пусть промис своим
возвращает результат деления единицы на сгенерированное
число. Пусть промис выполнится с ошибкой,
если произошло деление на ноль, и с успехом
во всех остальных случаях.