Глосcарий Промисы

Создание нового промиса осуществляется с помощью специального класса Promise

function timer() {
 return new Promise((resolve, reject)=> {
  setTimeout(()=>{
   resolve("Timeout");
  },2000);
 });
}

Класс Promise предоставляет три метода:

  1. then: если промис выполняется успешно, то будет осуществлен обратный вызов метода then.
  2. catch: если промис не выполняется, будет осуществлен обратный вызов метода catch.
  3. finally: метод вызывается, если промис выполнен.

Пример использования промиса:

timer().then((response)=>{
 // функция, возвращаемая в случае успеха
 console.log(response);
}).catch((error)=>{
 // функция, возвращаемая в случае ошибки
 console.log(error);
}).finally(()=>{
 // всегда вызывается
 console.log("Promise completed");
});

Цепочка промисов

Метод then возвращает новый промис, который можно использовать для дальнейшего объединения в цепочку.

Предположим, что нужно использовать несколько обратных вызовов для конкретного промиса и обработать результат один за другим.

Цепочка вызовов может быть реализована двумя способами:

timer().then(successHandler1, failureHandler1).
.then(successHandler2, failureHandler2)
.then(successHandler3, failuerHandler3)
.then(successHandler4, failureHandler4)
timer().then(successHandler1)
.then(successHandler2)
.then(successHandler3)
.catch(errorHandler)

Совместное выполнение нескольких промисов

Иногда нужно обработать два или более промисов и запустить обработчик, когда эти промисы будут выполнены. Этого можно добиться двумя способами:

Promise.all([promise1, promise2, promise3])
.then(response => {
// ответ - это массив, содержащий результаты переданных промисов
}).catch(error => {
// будет передаваться только первая ошибка.
})

Все промисы будут выполняться независимо от их результатов. Например, если promise2 вызовет ошибку, тогда promise3 будет выполнен. Затем будет вызван обработчик catch, который передаст ошибку promise2 блоку catch. Но блок then никогда не будет выполнен.

--