Modifying the document by malechaneit · Pull Request #299 · javascript-tutorial/uk.javascript.info
@@ -1,7 +1,7 @@
# Ланцюжок промісів
Повернемося до проблеми, згаданої в розділі [Введення: колбеки](info:callbacks): у нас є послідовність асинхронних задач, які потрібно виконувати одну за одною — наприклад, завантаження скриптів. Як ми можемо це добре закодувати? Повернемося до проблеми, згаданої в розділі <info:callbacks>: у нас є послідовність асинхронних задач, які потрібно виконувати одну за одною — наприклад, завантаження скриптів. Як ми можемо це добре закодувати?
Проміси надають кілька способів вирішення подібних задач.
Expand Down
Expand Up
@@ -36,7 +36,7 @@ new Promise(function(resolve, reject) {
Ось потік виконання: 1. Початковий проміс успішно виконується через 1 секунду `(*)`, 2. Далі викликається обробник `.then` `(**)`, який у свою чергу, створює новий проміс (вирішується зі значенням `2`). 2. Далі на `(**)` викликається обробник `.then`, який у свою чергу, створює новий проміс (вирішується зі значенням `2`). 3. Наступний `then` `(***)` приймає результат попереднього, оброблює його (подвоює) та передає до наступного обробника. 4. ...і так далі.
Expand Down
Expand Up
@@ -78,7 +78,7 @@ promise.then(function(result) {

Усі `.then` на одному й тому самому промісі отримують той самий результат - результат цього промісу. Тож у коді вище усі `alert` показують те саме: `1`. Усі `.then` на одному й тому самому промісі отримують той самий результат -- результат цього промісу. Тож у коді вище усі `alert` показують те саме: `1`.
На практиці нам рідко потрібні кілька обробників для одного промісу. Набагато частіше використовується ланцюжок.
Expand Down
Expand Up
@@ -120,7 +120,7 @@ new Promise(function(resolve, reject) {
});
```
Тут перший `.then` показує `1` і повертає `new Promise(…)` у рядку `(*)`. Через одну секунду він вирішується, а результат (аргумент `resolve`, тут це `результат * 2`) передається обробнику другого `.then`. Цей обробник знаходиться в рядку `(**)`, він показує `2` і робить те ж саме. Тут перший `.then` показує `1` і повертає `new Promise(…)` у рядку `(*)`. Через одну секунду він вирішується, а результат (аргумент `resolve`, тут це `result * 2`) передається обробнику другого `.then`. Цей обробник знаходиться в рядку `(**)`, він показує `2` і робить те ж саме.
Отже, результат такий же, як і в попередньому прикладі: 1 -> 2 -> 4, але тепер із затримкою в 1 секунду між викликами `alert`.
Expand Down
# Ланцюжок промісів
Повернемося до проблеми, згаданої в розділі [Введення: колбеки](info:callbacks): у нас є послідовність асинхронних задач, які потрібно виконувати одну за одною — наприклад, завантаження скриптів. Як ми можемо це добре закодувати? Повернемося до проблеми, згаданої в розділі <info:callbacks>: у нас є послідовність асинхронних задач, які потрібно виконувати одну за одною — наприклад, завантаження скриптів. Як ми можемо це добре закодувати?
Проміси надають кілька способів вирішення подібних задач.
Ось потік виконання: 1. Початковий проміс успішно виконується через 1 секунду `(*)`, 2. Далі викликається обробник `.then` `(**)`, який у свою чергу, створює новий проміс (вирішується зі значенням `2`). 2. Далі на `(**)` викликається обробник `.then`, який у свою чергу, створює новий проміс (вирішується зі значенням `2`). 3. Наступний `then` `(***)` приймає результат попереднього, оброблює його (подвоює) та передає до наступного обробника. 4. ...і так далі.

Усі `.then` на одному й тому самому промісі отримують той самий результат - результат цього промісу. Тож у коді вище усі `alert` показують те саме: `1`. Усі `.then` на одному й тому самому промісі отримують той самий результат -- результат цього промісу. Тож у коді вище усі `alert` показують те саме: `1`.
На практиці нам рідко потрібні кілька обробників для одного промісу. Набагато частіше використовується ланцюжок.
Тут перший `.then` показує `1` і повертає `new Promise(…)` у рядку `(*)`. Через одну секунду він вирішується, а результат (аргумент `resolve`, тут це `результат * 2`) передається обробнику другого `.then`. Цей обробник знаходиться в рядку `(**)`, він показує `2` і робить те ж саме. Тут перший `.then` показує `1` і повертає `new Promise(…)` у рядку `(*)`. Через одну секунду він вирішується, а результат (аргумент `resolve`, тут це `result * 2`) передається обробнику другого `.then`. Цей обробник знаходиться в рядку `(**)`, він показує `2` і робить те ж саме.
Отже, результат такий же, як і в попередньому прикладі: 1 -> 2 -> 4, але тепер із затримкою в 1 секунду між викликами `alert`.