Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
objavlenie_promisi [2024/01/11 07:43] tro |
objavlenie_promisi [2024/01/25 19:27] (текущий) tro |
||
|---|---|---|---|
| Строка 5: | Строка 5: | ||
| * исполнен (resolve) | * исполнен (resolve) | ||
| * отклонен (reject) | * отклонен (reject) | ||
| - | ===== обявление промиса ===== | + | ===== обявление промиса |
| + | При створенні промісу всередині буде відразу вконана та дія. Сюди загоняємо те що повинно буде виконано у промісі. | ||
| < | < | ||
| const myPromise = new Promise ((resolve, reject)=> | const myPromise = new Promise ((resolve, reject)=> | ||
| Строка 12: | Строка 13: | ||
| </ | </ | ||
| ===== Обробка резуьтата промиса (.then) ===== | ===== Обробка резуьтата промиса (.then) ===== | ||
| + | В методах then прописуємо що буде виконано коли настане подія вдалого, | ||
| + | < | ||
| + | promise.then(onFullFild).catch(onReject); | ||
| + | </ | ||
| < | < | ||
| myPromse | myPromse | ||
| Строка 48: | Строка 53: | ||
| У змінну promise буде записаний проміс (об' | У змінну promise буде записаний проміс (об' | ||
| + | |||
| + | ===== Обробка помилки catch() ===== | ||
| + | |||
| + | На практиці в методі then() обробляють тільки успішне виконання промісу. | ||
| + | Помилку його виконання обробляють у спеціальному методі **catch()** для «відловлювання» помилок. | ||
| + | < | ||
| + | const isSuccess = true; | ||
| + | |||
| + | // Create promise | ||
| + | const promise = new Promise((resolve, | ||
| + | setTimeout(() => { | ||
| + | if (isSuccess) { | ||
| + | resolve(" | ||
| + | } else { | ||
| + | reject(" | ||
| + | } | ||
| + | }, 2000); | ||
| + | }); | ||
| + | |||
| + | // Registering promise callbacks | ||
| + | promise | ||
| + | .then(value => { | ||
| + | console.log(value); | ||
| + | }) | ||
| + | .catch(error => { | ||
| + | console.log(error); | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | ===== Метод finally() ===== | ||
| + | метод може бути корисним, | ||
| + | Колбек-функція не отримає жодних аргументів, | ||
| + | < | ||
| + | promise | ||
| + | .then(value => { | ||
| + | // Promise fulfilled | ||
| + | }) | ||
| + | .catch(error => { | ||
| + | // Promise rejected | ||
| + | }) | ||
| + | .finally(() => { | ||
| + | // Promise fulfilled or rejected | ||
| + | }); | ||
| + | </ | ||
| + | < | ||
| + | const isSuccess = true; | ||
| + | |||
| + | // Create promise | ||
| + | const promise = new Promise((resolve, | ||
| + | setTimeout(() => { | ||
| + | if (isSuccess) { | ||
| + | resolve(" | ||
| + | } else { | ||
| + | reject(" | ||
| + | } | ||
| + | }, 2000); | ||
| + | }); | ||
| + | |||
| + | // Registering promise callbacks | ||
| + | promise | ||
| + | .then(value => console.log(value)) // " | ||
| + | .catch(error => console.log(error)) // " | ||
| + | .finally(() => console.log(" | ||
| + | </ | ||
| + | ===== Ланцюжки промісів then() ===== | ||
| + | Метод then() повертає новий проміс, | ||
| + | < | ||
| + | const promise = new Promise((resolve, | ||
| + | setTimeout(() => { | ||
| + | resolve(5); | ||
| + | }, 2000); | ||
| + | }); | ||
| + | |||
| + | promise | ||
| + | .then(value => { | ||
| + | console.log(value); | ||
| + | return value * 2; | ||
| + | }) | ||
| + | .then(value => { | ||
| + | console.log(value); | ||
| + | return value * 3; | ||
| + | }) | ||
| + | .then(value => { | ||
| + | console.log(value); | ||
| + | }) | ||
| + | .catch(error => { | ||
| + | console.log(error); | ||
| + | }) | ||
| + | .finally(() => { | ||
| + | console.log(" | ||
| + | }); | ||
| + | </ | ||
| + | ===== Promise.resolve() і Promise.reject() ===== | ||
| + | | ||
| + | * Так створюється успішно виконаний проміс через Promise.resolve(): | ||
| + | < | ||
| + | Promise.resolve(" | ||
| + | .then(value => console.log(value)); | ||
| + | .catch(error => console.log(error)); | ||
| + | </ | ||
| + | * Так створюється проміс, | ||
| + | < | ||
| + | Promise.reject(" | ||
| + | .then(value => console.log(value)); | ||
| + | .catch(error => console.log(error)); | ||
| + | </ | ||
| + | ===== Promise.all() (Обробка множинних промісів) ===== | ||
| + | Є ситуації, | ||
| + | Метод Promise.all() **дозволяє одночасно обробити кілька промісів та отримати їхні результати**. Він приймає масив промісів як вхідні дані, чекає їх виконання та повертає один проміс. | ||
| + | Якщо всі проміси виконуються успішно, | ||
| + | |||
| + | < | ||
| + | const p1 = Promise.resolve(1); | ||
| + | const p2 = Promise.resolve(2); | ||
| + | const p3 = Promise.resolve(3); | ||
| + | |||
| + | Promise.all([p1, | ||
| + | .then(values => console.log(values)); | ||
| + | .catch(error => console.log(error)); | ||
| + | </ | ||
| + | | ||
| + | ===== Promise.allSettled() ===== | ||
| + | Також дозволяє одночасно обробити кілька промісів та отримати їхні результати. | ||
| + | Відмінність від Promise.all полягає в тому, що метод Promise.allSettled() **чекає виконання всіх промісів незалежно від того, чи були деякі або навіть всі проміси відхилені**. | ||
| + | ===== Promise.race ===== | ||
| + | приймає масив промісів і повертає " | ||
| + | < | ||
| + | const p1 = new Promise((resolve, | ||
| + | setTimeout(() => resolve(1), 1000); | ||
| + | }); | ||
| + | |||
| + | const p2 = new Promise((resolve, | ||
| + | setTimeout(() => reject(2), 2000); | ||
| + | }); | ||
| + | |||
| + | Promise.race([p1, | ||
| + | .then(value => console.log(value)); | ||
| + | .catch(error => console.log(error)); | ||
| + | </ | ||
| + | |||
| + | ===== Іньші приклади ===== | ||
| * Приклад 2 (web) | * Приклад 2 (web) | ||
| < | < | ||