Skip to content

Commit af3d827

Browse files
committed
Reread text
1 parent 4237a33 commit af3d827

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
Представьте, что вы известный певец, которого фанаты постоянно донимают расспросами о предстоящем сингле.
44

5-
Чтобы получить передышку, вы обещаете разослать им сингл, когда он будет выпущен. Вы даете фанатам список, в который они могут записаться, чтобы получать новости. Они могут оставить свой e-mail, чтобы когда песня выйдет сразу получить её. И даже больше, если, например, вы передумаете выпускать песню, они также получат уведомление об этом.
5+
Чтобы получить передышку, вы обещаете разослать им сингл, когда он будет выпущен. Вы даете фанатам список, в который они могут записаться, чтобы получать новости. Они могут оставить свой e-mail, чтобы получить песню, как только она выйдет. И даже больше, если, например, вы передумаете выпускать песню, они также получат уведомление об этом.
66

7-
Все счастливы! Вы счастливы, потому что вас больше не донимают фанаты, а фанаты - могут больше не беспокоится, что пропустят новый сингл.
7+
Все счастливы! Вы счастливы, потому что вас больше не донимают фанаты, а фанаты могут больше не беспокоится, что пропустят новый сингл.
88

99
Это аналогия из реальной жизни для ситуаций, с которыми мы часто сталкиваемся в программировании:
1010

1111
1. "Певец" - это "создающий" код, который делает что-то, что занимает время. Например, скачивает новый скрипт.
1212
2. "Фанаты" - это "потребляющий" код, который хочет получить результат "создающего" кода, когда он будет готов. Этот результат может быть необходим большому количеству функций.
1313
3. *Promise* (обещание) - это специальный объект в JavaScript, который связывает "создающий" и "потребляющий" коды вместе. В терминах нашей аналогии - это "список подписок". "Создающий" код может выполнятся любое необходимое ему время, чтобы получить обещанный результат, а *промис* делает результат доступным для всего кода, который подписан на него, когда результат готов.
1414

15-
Аналогия не совсем точна, потому что объект Promise в JavaScript гораздо сложнее простого списка подписок: он обладает дополнительными возможностями и ограничениями. Но для начала и она хороша.
15+
Аналогия не совсем точна, потому что объект Promise в JavaScript гораздо сложнее простого списка подписок: он обладает дополнительными возможностями и ограничениями. Но для начала и такая аналогия хороша.
1616

1717
Синтаксис создания `Promise`:
1818

@@ -93,7 +93,7 @@ let promise = new Promise(function(resolve, reject) {
9393
});
9494
```
9595
96-
Идея в том, что задача выполняемая исполнителем может иметь только один итог: результат или ошибку.
96+
Идея в том, что задача, выполняемая исполнителем, может иметь только один итог: результат или ошибку.
9797
9898
Также, `resolve`/`reject` ожидает только один аргумент (или ни одного), а все дополнительные аргументы будут проигнорированы.
9999
````
@@ -123,7 +123,7 @@ let promise = new Promise(function(resolve, reject) {
123123
124124
## Потребители: then, catch, finally
125125
126-
Объект `Promise` служит связующем звеном между исполнителем ("создающим" кодом или "певцом") и функциями-потребителями ("фанатами"), которые получат, либо результат, либо ошибку. Функции-потребители могут быть зарегистрированы (подписаны) с помощью методов `.then`, `.catch` и `.finally`.
126+
Объект `Promise` служит связующим звеном между исполнителем ("создающим" кодом или "певцом") и функциями-потребителями ("фанатами"), которые получат либо результат, либо ошибку. Функции-потребители могут быть зарегистрированы (подписаны) с помощью методов `.then`, `.catch` и `.finally`.
127127
128128
### Метод then (после)
129129
@@ -215,7 +215,7 @@ promise.catch(alert); // выведет "Error: Whoops!" спустя одну
215215
216216
По аналогии с блоком `finally` из обычного `try {...} catch {...}`, в `promise`, также есть метод `finally`.
217217
218-
Вызов `.finally(f)` это тоже самое, что передать в `.then(f, f)`, в том смысле, что "потребляющий" код выполниться в любом случае, когда промис станет решённым: успешно или с ошибкой.
218+
Вызов `.finally(f)` это тоже самое, что передать в `.then(f, f)`, в том смысле, что "потребляющий" код выполнится в любом случае, когда промис станет решённым: успешно или с ошибкой.
219219
220220
`finally` хорошо подходит для очистки, например остановки индикаторов загрузки, поскольку они будут не нужны в независимости от результата.
221221
@@ -234,7 +234,7 @@ new Promise((resolve, reject) => {
234234
235235
Это не совсем псевдоним, как можно было подумать. Существует несколько важных отличий:
236236
237-
1. Обработчик, вызываемый из `finally` не имеет аргументов. В `finally` мы не знаем, как был завершён `Promise`. И это нормально, потому что обычно, наша задача - выполнить "основные" завершающие процедуры.
237+
1. Обработчик, вызываемый из `finally` не имеет аргументов. В `finally` мы не знаем, как был завершён `Promise`. И это нормально, потому что обычно наша задача - выполнить "основные" завершающие процедуры.
238238
2. `Finally` пропустит результат или ошибку к следующим обработчикам.
239239
240240
Например, здесь результат проходит через `finally` к `then`:
@@ -260,7 +260,7 @@ new Promise((resolve, reject) => {
260260
261261
Мы поговорим о создании цепочек промисов и передаче результатов между обработчиками в следующей главе.
262262
263-
3. Последнее, но не менее значимое, у метода `.finally(f)` более удобный синтаксис, чем у`.then(f, f)`: не надо дублировать функции.
263+
3. Последнее, но не менее значимое, у метода `.finally(f)` более удобный синтаксис, чем у`.then(f, f)` - не надо дублировать функции.
264264
265265
````smart header="На завершенных промисах обработчики запускаются сразу"
266266
Если промис в состоянии ожидания, обработчики в `.then/catch/finally` будут ждать его окончания. Однако, если `promise` уже решён, тогда обработчики выполнятся сразу:
@@ -296,7 +296,7 @@ function loadScript(src, callback) {
296296

297297
Теперь перепишем её используя `Promise`.
298298

299-
Новой функции `loadScript` будет не нужен аргумент callback. Вместо этого она будет создавать и возвращать объект `Promise`, который будет переходить в состояние решён, когда загрузка закончится. Внешний код может добавлять обработчики (функции-подписчиков) используя для этого метод `.then`:
299+
Новой функции `loadScript` будет не нужен аргумент callback. Вместо этого она будет создавать и возвращать объект `Promise`, который будет переходить в состояние решён, когда загрузка закончится. Внешний код может добавлять обработчики (функции-подписчиков), используя для этого метод `.then`:
300300

301301
```js run
302302
function loadScript(src) {
@@ -330,7 +330,7 @@ promise.then(script => alert('One more handler to do something else!'));
330330

331331
| Promises | Callbacks |
332332
|----------|-----------|
333-
| Промисы позволяют делать вещи в естественном порядке. Сперва мы запускаем `loadScript(script)`, и затем (`.then`) мы пишем, что делать с результатом. | У нас должна быть функция`callback` на момент вызова `loadScript(script, callback)`. Другими словами, нам нужно знать что делать с результатом, *до того*, как вызвать `loadScript`. |
333+
| Промисы позволяют делать вещи в естественном порядке. Сперва мы запускаем `loadScript(script)`, и затем (`.then`) мы пишем, что делать с результатом. | У нас должна быть функция`callback` на момент вызова `loadScript(script, callback)`. Другими словами, нам нужно знать что делать с результатом *до того*, как вызвать `loadScript`. |
334334
| Мы можем вызывать `.then` у `Promise` столько раз, сколько захотим. Каждый раз, мы добавляем нового "фаната", новую функцию-подписчика, в "список подписок". Больше об этом в следующей главе: [](info:promise-chaining). | Колбэк может быть только один. |
335335

336336
Таким образом, промисы позволяют улучшить порядок кода и дают нам гибкость. Но это ещё не всё. Мы увидим это в следующих главах.

0 commit comments

Comments
 (0)