Дисциплины - Проектирование динамических страниц

Основы JavaScript в Проектировании динамических страниц - Промисы

Promise – это специальный объект, который содержит своё состояние. Вначале pending («ожидание»), затем – одно из: fulfilled («выполнено успешно») или rejected («выполнено с ошибкой»).

Подробнее о прописах по ссылке https://learn.javascript.ru/promise

Создание нового промиса осуществляется с помощью специального класса 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 возвращает новый промис, который можно использовать для дальнейшего объединения в цепочку.

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

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

  • Использование отдельного обработчика ошибок для каждого успешного обратного вызова – при этом метод then принимает два аргумента: один для успешного обратного вызова,а другой — для неудачного:
timer().then(successHandler1, failureHandler1).
.then(successHandler2, failureHandler2)
.then(successHandler3, failuerHandler3)
.then(successHandler4, failureHandler4)
  • Использование стандартного обработчика ошибок – обратный вызов failureHandlerне является обязательным в методе then. Поэтому можно использовать блок catch для общей обработки ошибок:
timer().then(successHandler1)
.then(successHandler2)
.then(successHandler3)
.catch(errorHandler)

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

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

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

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

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
00421-00422 ИИТ БГУИР
00423 ИИТ БГУИР
10421-10422 ИИТ БГУИР
10423 БГУИР
20421 БГУИР
30421 БГУИР
30423 БГУИР


Изображения Видео

1. JavaScript. Функциональное программирование. Лекция 2. Преобразование данных <iframe width="560" height="315" src="https://www.youtube.com/embed/EBKzRg4aTro" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
2. JavaScript. Функциональное программирование. Лекция 2 (продолжение) <iframe width="560" height="315" src="https://www.youtube.com/embed/phyt4PFk6Pc" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
3. HTML5 http://erud.by/files/books/HTML5.docx
4. ООП в JavaScript http://erud.by/object_orient_program/586
5. Фоновое видео jQuery http://johnpolacek.github.io/BigVideo.js
Учебная программа