Skip to content

Commit

Permalink
update(JS): web/javascript/reference/global_objects/promise
Browse files Browse the repository at this point in the history
  • Loading branch information
undead404 authored and AdriandeCita committed Nov 27, 2022
1 parent f5ffc16 commit bd8d895
Showing 1 changed file with 4 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,8 @@ const promiseC = promiseA.then(handleFulfilled2, handleRejected2);
Можна прив'язати якусь дію до вже "залагодженого" промісу. В цьому випадку дію (якщо це допустимо) буде виконано при першій ліпшій асинхронній можливості. Зауважте, що проміси гарантовано асинхронні. Таким чином, дія для уже "залагодженого" промісу трапиться лише після того, як стек викликів буде очищено і мине мить таймера рушія. Цей ефект дуже схожий до результату виконання `setTimeout(action, 10)`.

```js
const promiseA = new Promise((resolutionFunc, rejectionFunc) => {
resolutionFunc(777);
const promiseA = new Promise((resolve, reject) => {
resolve(777);
});
// В цей момент "promiseA" уже залагоджено.
promiseA.then((val) =>
Expand Down Expand Up @@ -182,7 +182,7 @@ Promise.resolve(aThenable); // Проміс сповнюється значен

Усі ці методи приймають [ітеровані колекції](/uk/docs/Web/JavaScript/Reference/Iteration_protocols#protokol-iteruvannia) промісів ([очікуваних](#ochikuvani), якщо точніше) і повертають новий проміс. Усі вони підтримують підкласи, а отже – їх можна викликати на підкласах `Promise`, а результат буде промісом з типом підкласу. Для цього конструктор підкласу мусить реалізувати таку само сигнатуру, як конструктор [`Promise()`](/uk/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise): приймання єдиної функції `executor`, що може бути викликана з функціями зворотного виклику `resolve` і `reject` як параметрами. Підклас також мусить мати статичний метод `resolve`, котрий можна викликати як {{jsxref("Promise.resolve()")}} для загортання значень у проміси.

Зверніть увагу, що JavaScript за своєю природою є [однопоточною мовою](/uk/docs/Glossary/Thread), тож у конкретну мить може виконуватися лише одна задача, хоч контроль може переходити від одного промісу до іншого, через що проміси здаються рівночасними. [Паралельне виконання](https://uk.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%96_%D0%BE%D0%B1%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%BD%D1%8F) у JavaScript може бути досягнуто лише за допомогою [тредів-воркерів](/uk/docs/Web/API/Web_Workers_API).
Зверніть увагу, що JavaScript за своєю природою є [однопотоковою мовою](/uk/docs/Glossary/Thread), тож у конкретну мить може виконуватися лише одна задача, хоч контроль може переходити від одного промісу до іншого, через що проміси здаються рівночасними. [Паралельне виконання](https://uk.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%96_%D0%BE%D0%B1%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%BD%D1%8F) у JavaScript може бути досягнуто лише за допомогою [тредів-воркерів](/uk/docs/Web/API/Web_Workers_API).

## Конструктор

Expand Down Expand Up @@ -268,7 +268,7 @@ myFirstPromise.then((successMessage) => {

Функція `tetheredGetNumber()` в прикладі зображає генератор промісу, який викличе `reject()` або під час влаштування асинхронного виклику, або всередині функції зворотного виклику, або ж і там, і там. Функція `promiseGetWord()` ілюструє, як функція API може створювати та повертати проміс автономно.

Зауважте, що функція `troubleWithGetNumber()` завершується `throw`. Це вимушений крок, оскільки послідовність промісів у ES6 проходить через всі `.then()`, навіть після помилки. І без цього `throw` помилка буде здаватися "виправленою". Це зайвий клопіт, і через це зазвичай опускають `rejectionFunc` у всій послідовності промісів `.then()` і просто залишають єдину `rejectionFunc` всередині кінцевого `catch()`.
Зауважте, що функція `troubleWithGetNumber()` завершується `throw`. Це вимушений крок, оскільки послідовність промісів у ES6 проходить через всі `.then()`, навіть після помилки. І без цього `throw` помилка буде здаватися "виправленою". Це зайвий клопіт, і через це зазвичай опускають `onRejected` у всій послідовності промісів `.then()` і просто залишають єдину `onRejected` всередині кінцевого `catch()`.

Цей код може запускатися в середовищі NodeJS. Він буде більш зрозумілим, якщо переглянути помилки, які виникнуть у процесі виконання. Щоб збільшити кількість помилок, змініть значення `threshold`.

Expand Down

0 comments on commit bd8d895

Please sign in to comment.