11 Модуль - Таймеры. Promise API -- 03 Promise API Flashcards

1
Q

Promise (обещание, промис) —

A

— объект, представляющий текущее состояние асинхронной операции.
- это болванка для данных, значение которых мы не знаем в момент его создания.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

У промиса есть 2 состояния:

A

Pending — ожидание, исходное состояние при создании промиса.
Settled — выполнен, которое в свою очередь делится на две категории: fullfilled — выполнено успешно и rejected — выполнено с ошибкой.
Вначале промис находится в состоянии ожидания (pending), после чего он может выполнится успешно (fulfilled) или с ошибкой (rejected). Когда промис переходит в состояние выполнен (settled), с результатом или ошибкой – это навсегда.
http://fecore.net.ua/books/m5ph3r-javascript/module-11/images/promise-intro.png

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Promise способы использования:

A

– По завершении процесса асинхронный код переводит обещание в состояние fulfilled или rejected. При этом автоматически вызываются обработчики во внешнем коде.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Обещания используются в основном для

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Создание Promise

A

Обещание создается как экземпляр класса Promise с одной функцией в качестве аргумента. Вызов конструктора немедленно исполнит функцию fn, переданную в качестве аргумента. Цель этой функции состоит в информировании экземпляра (промиса), когда событие, с которым он связан, будет завершено.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

resolve(arg) — функция, которую

A

необходимо вызвать при успешной операции. Переданный в нее аргумент будет значением выполненного промиса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

reject(arg) — функция, которую

A

необходимо вызвать при ошибке. Переданный в нее аргумент будет значением ошибки которое можно будет обработать.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Step by step работа промиса?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

then позволяет выполнить код, в

A

котором можно получить доступ и обработать результат промиса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

В метод then передаются

A

две функции, которые будут вызваны когда промис перейдет в состояние выполнен (settled).
promise.then(onResolve, onReject)
onResolve(arg) — будет вызвана при успешном выполнении промиса и получит результат промиса как аргумент (то, что передаем в вызов resolve).
onReject(arg) — будет вызвана при выполнении промиса с ошибкой и получит ошибку как аргумент (то, что передаем в вызов reject).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

catch что делает?

A

Обрабатывать ошибки очень удобно, используя метод catch только один раз, в конце цепочки.
При возникновении ошибки в любом месте цепочки, выполнение всех последующих then отменяется, а управление передается методу catch.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Для чего нужен метод finally?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Каждый метод then, результатом своего выполнения, возвращает

A

промис

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что делает статический метод Promise.all() ?

A

Статический метод, получает массив промисов и ждет их исполнения, возвращает промис.
Promise.all([promise1, promise2, …])

При успешном выполнении всех промисов из массива, промис, возвращаемый из Promise.all, перейдет в состояние settled -> fullfilled, а его значением будет массив результатов исполнения каждого промиса.

Если в массиве промисов хотя бы один исполнился с ошибкой, то перейдет в состояние settiled -> rejected, а значением промиса будет ошибка.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Что делает статический метод Promise.race() ?

A

Promise.race([promise1, promise2, …])
Статический метод, получает массив промисов и возвращает обещание. Когда хотя бы одно обещание в массиве исполнилось, исполнится возвращаемый промис, а все остальные будут отброшены.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что аналогично будет этим методам? Promise.resolve(), Promise.reject() и Promise.finally()

A

Вызов статического метода Promise.resolve(value) создаёт успешно выполнившийся промис с результатом value. Это аналогично new Promise((resolve) => resolve(value)), только короче. Этот метод используют, когда хотят построить асинхронную цепочку и начальный результат уже есть.