Skip to content

Commit e29d88b

Browse files
authored
👾 smth
1 parent a383da5 commit e29d88b

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

1-js/11-async/02-promise-basics/article.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ let promise = new Promise(function(resolve, reject) {
127127
Свойства `state` и `result` - это внутренние свойства объекта `Promise` и мы не имеем к ним прямого доступа. Для обработки результата следует использовать методы `.then`/`.catch`/`.finally`, про них речь пойдёт дальше.
128128
```
129129
130-
## Потребители: then, catch, finally
130+
## Потребители: then, catch
131131
132-
Объект `Promise` служит связующим звеном между исполнителем ("создающим" кодом или "певцом") и функциями-потребителями ("фанатами"), которые получат либо результат, либо ошибку. Функции-потребители могут быть зарегистрированы (подписаны) с помощью методов `.then`, `.catch` и `.finally`.
132+
Объект `Promise` служит связующим звеном между исполнителем ("создающим" кодом или "певцом") и функциями-потребителями ("фанатами"), которые получат либо результат, либо ошибку. Функции-потребители могут быть зарегистрированы (подписаны) с помощью методов `.then` и `.catch`.
133133
134134
### then
135135
@@ -217,22 +217,29 @@ promise.catch(alert); // выведет "Error: Ошибка!" спустя од
217217
218218
Вызов `.finally(f)` похож на `.then(f, f)`, в том смысле, что `f` выполнится в любом случае, когда промис завершится: успешно или с ошибкой.
219219
220-
`finally` хорошо подходит для очистки, например остановки индикатора загрузки, его ведь нужно остановить вне зависимости от результата.
220+
Идея `finally` состоит в том, чтобы настроить обработчик для выполнения очистки/доведения после завершения предыдущих операций.
221221
222-
Например:
222+
Например, остановка индикаторов загрузки, закрытие больше не нужных соединений и т.д.
223+
224+
Думайте об этом как о завершении вечеринки. Независимо от того, была ли вечеринка хорошей или плохой, сколько на ней было друзей, нам все равно нужно (или, по крайней мере, мы должны) сделать уборку после нее.
225+
226+
Код может выглядеть следующим образом:
223227
224228
```js
225229
new Promise((resolve, reject) => {
226-
/* сделать что-то, что займёт время, и после вызвать resolve/reject */
230+
/* сделать что-то, что займёт время, и после вызвать resolve или может reject */
227231
})
228232
*!*
229233
// выполнится, когда промис завершится, независимо от того, успешно или нет
230234
.finally(() => остановить индикатор загрузки)
235+
// таким образом, индикатор загрузки всегда останавливается, прежде чем мы продолжим
231236
*/!*
232237
.then(result => показать результат, err => показать ошибку)
233238
```
234239
235-
Но это не совсем псевдоним `then(f,f)`, как можно было подумать. Существует несколько важных отличий:
240+
Обратите внимание, что `finally(f)` - это не совсем псевдоним `then(f,f)`, как можно было подумать.
241+
242+
Есть важные различия:
236243
237244
1. Обработчик, вызываемый из `finally`, не имеет аргументов. В `finally` мы не знаем, как был завершён промис. И это нормально, потому что обычно наша задача - выполнить "общие" завершающие процедуры.
238245
@@ -244,10 +251,10 @@ new Promise((resolve, reject) => {
244251
245252
```js run
246253
new Promise((resolve, reject) => {
247-
setTimeout(() => resolve("result"), 2000)
254+
setTimeout(() => resolve("value"), 2000);
248255
})
249256
.finally(() => alert("Промис завершён")) // срабатывает первым
250-
.then(result => alert(result)); // <-- .then показывает "значение"
257+
.then(result => alert(result)); // <-- .then показывает "value"
251258
```
252259
253260
Как вы можете видеть, значение возвращаемое первым промисом, передается через `finally` к следующему `then`.

0 commit comments

Comments
 (0)