Skip to content

Commit 4237a33

Browse files
committed
Text improovments
1 parent 32672ed commit 4237a33

1 file changed

Lines changed: 22 additions & 22 deletions

File tree

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

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

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

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

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

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

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

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

@@ -22,14 +22,14 @@ let promise = new Promise(function(resolve, reject) {
2222
});
2323
```
2424

25-
Функция, переданная в конструкцию `new Promise` называется *исполнитель*. Когда `Promise` создан, функция-исполнитель запускается автоматически. Она содержит "создающий" код, который когда-нибудь создать результат. В терминах аналогии: *исполнитель* - это "певец".
25+
Функция, переданная в конструкцию `new Promise` называется *исполнитель*. Когда `Promise` создан, функция-исполнитель запускается автоматически. Она содержит "создающий" код, который когда-нибудь создаст результат. В терминах нашей аналогии: *исполнитель* - это "певец".
2626

2727
Объект `Promise`, полученный в результате выполнения конструктора, имеет внутренние свойства:
2828

29-
- `state` ("состояние") — вначале `pending` ("ожидание"), потом может измениться на `fulfilled` («выполнено успешно») or `rejected` ("выполнено с ошибкой"),
29+
- `state` ("состояние") — вначале `pending` ("ожидание"), потом может измениться на `fulfilled` ("выполнено успешно") или `rejected` ("выполнено с ошибкой"),
3030
- `result` ("результат") — имеет произвольное значение, по вашему выбору, изначально `undefined`.
3131

32-
Когда исполнитель завершает выполнение, он должен вызвать одну из функций, полученных в качестве аргументов:
32+
Когда функция-исполнитель завершает своё выполнение, она должна вызвать одну из функций, полученных в качестве аргументов:
3333

3434
- `resolve(value)` — сообщает, что работа выполнена успешно:
3535
- устанавливает в `state` значение `"fulfilled"`,
@@ -55,8 +55,8 @@ let promise = new Promise(function(resolve, reject) {
5555

5656
Мы можем наблюдать две вещи, запустив код выше:
5757

58-
1. Исполнитель вызывается автоматически и сразу (с помощью `new Promise`).
59-
2. Исполнитель получает два аргумента: `resolve` и `reject`эти функции встроены в JavaScript, поэтому нам не нужно их создавать. Вместо этого мы должны написать функцию-исполнитель, для их вызова по готовности.
58+
1. Исполнитель будет вызван автоматически без задержек (с помощью `new Promise`).
59+
2. Исполнитель получает два аргумента: `resolve` и `reject`это функции встроенные в JavaScript, поэтому нам не нужно их писать. Вместо этого мы должны написать функцию-исполнитель, которая вызовет одну из них по готовности.
6060

6161
Спустя одну секунду "обработки" исполнитель вызовет `resolve("done")`, чтобы передать результат:
6262

@@ -93,7 +93,7 @@ let promise = new Promise(function(resolve, reject) {
9393
});
9494
```
9595
96-
Идея в том, что задача выполненная исполнителем может иметь только что-то одно: результат или ошибку.
96+
Идея в том, что задача выполняемая исполнителем может иметь только один итог: результат или ошибку.
9797
9898
Также, `resolve`/`reject` ожидает только один аргумент (или ни одного), а все дополнительные аргументы будут проигнорированы.
9999
````
@@ -102,8 +102,8 @@ let promise = new Promise(function(resolve, reject) {
102102
На случай, когда что-то пойдёт неправильно, `reject` может быть вызван аргументом любого типа (как и `resolve`). Но рекомендуется использовать объект `Error` (или унаследованный от него). "Почему так?" Скоро нам станет понятно.
103103
```
104104
105-
````smart header="Мгновенный вызов `resolve`/`reject`"
106-
Обычно, исполнитель делает что-то асинхронное и после этого вызывает `resolve`/`reject` через какое-то время, но это не обязательно. `resolve` или `reject` могут быть вызваны сразу, как в примере:
105+
````smart header="Вызов `resolve`/`reject` сразу"
106+
Обычно, исполнитель делает что-то асинхронное и после этого вызывает `resolve`/`reject` через какое-то время, но это не обязательно. `resolve` или `reject` могут быть вызваны сразу:
107107
108108
```js
109109
let promise = new Promise(function(resolve, reject) {
@@ -118,7 +118,7 @@ let promise = new Promise(function(resolve, reject) {
118118
````
119119
120120
```smart header="Свойства `state` и `result` - внутренние"
121-
Свойства `state` и `result` - это внутренние свойства объекта `Promise` и мы не имеем к ним прямого доступа из "потребляющего" кода. Для этого следует использовать методы `.then`/`.catch`/`.finally`, про них речь пойдет дальше.
121+
Свойства `state` и `result` - это внутренние свойства объекта `Promise` и мы не имеем к ним прямого доступа из "потребляющего" кода. Для обработки результата следует использовать методы `.then`/`.catch`/`.finally`, про них речь пойдет дальше.
122122
```
123123
124124
## Потребители: then, catch, finally
@@ -138,17 +138,17 @@ promise.then(
138138
);
139139
```
140140
141-
Первый аргумент метода `.then` - функция, которая
141+
Первый аргумент метода `.then` - функция, которая:
142142
143-
1. выполняется, когда `Promise` переходит в состояние `fulfilled`
143+
1. выполняется, когда `Promise` переходит в состояние `fulfilled`, и
144144
2. получает результат.
145145
146146
Второй аргумент `.then` - функция, которая:
147147
148-
1. выполняется, когда `Promise` переходит в состояние `rejected`
148+
1. выполняется, когда `Promise` переходит в состояние `rejected`, и
149149
2. получает ошибку.
150150
151-
Например, ниже реакции на успешно завершенный промис:
151+
Например, ниже реакции на успешно выполненный промис:
152152
153153
```js run
154154
let promise = new Promise(function(resolve, reject) {
@@ -209,11 +209,11 @@ promise.catch(alert); // выведет "Error: Whoops!" спустя одну
209209
*/!*
210210
```
211211
212-
Вызов `.catch(f)` - это сокращенный вариант `.then(null, f)`, внутри они полностью аналогичны.
212+
Вызов `.catch(f)` - это сокращенный вариант `.then(null, f)`, внутри они полностью одинаковые.
213213
214214
### Метод finally (в конце)
215215
216-
По аналогии с блоком `finally` из обычного `try {...} catch {...}`, в `promise`, также есть метод `finally`
216+
По аналогии с блоком `finally` из обычного `try {...} catch {...}`, в `promise`, также есть метод `finally`.
217217
218218
Вызов `.finally(f)` это тоже самое, что передать в `.then(f, f)`, в том смысле, что "потребляющий" код выполниться в любом случае, когда промис станет решённым: успешно или с ошибкой.
219219
@@ -232,9 +232,9 @@ new Promise((resolve, reject) => {
232232
.then(result => show result, err => show error)
233233
```
234234
235-
Это не совсем псевдоним, как можно подумать. Существует несколько важных отличий:
235+
Это не совсем псевдоним, как можно было подумать. Существует несколько важных отличий:
236236
237-
1. Обработчик, вызываемый из `finally` не имеет аргументов. Мы не знаем, как в `finally` был завершён `Promise`. И это нормально, потому что обычно, наша задача - выполнить "главные" завершающие процедуры.
237+
1. Обработчик, вызываемый из `finally` не имеет аргументов. В `finally` мы не знаем, как был завершён `Promise`. И это нормально, потому что обычно, наша задача - выполнить "основные" завершающие процедуры.
238238
2. `Finally` пропустит результат или ошибку к следующим обработчикам.
239239
240240
Например, здесь результат проходит через `finally` к `then`:
@@ -263,15 +263,15 @@ new Promise((resolve, reject) => {
263263
3. Последнее, но не менее значимое, у метода `.finally(f)` более удобный синтаксис, чем у`.then(f, f)`: не надо дублировать функции.
264264
265265
````smart header="На завершенных промисах обработчики запускаются сразу"
266-
Если `promise` в состоянии ожидания, обработчики в `.then/catch/finally` будут ждать окончания. Однако, если `promise` уже решён, тогда они выполнятся сразу:
266+
Если промис в состоянии ожидания, обработчики в `.then/catch/finally` будут ждать его окончания. Однако, если `promise` уже решён, тогда обработчики выполнятся сразу:
267267
268268
```js run
269269
// мгновенный перевод `promise` в состояние решён
270270
let promise = new Promise(resolve => resolve("done!"));
271271
272272
promise.then(alert); // done! (выведется сразу)
273273
```
274-
Хорошо то, что обработчик `.then` гарантированно запустится независимо от того, установится `Promise` мгновенно, или через какое-то время.
274+
Хорошо то, что обработчик `.then` гарантированно будет запущен независимо от того, был ли `Promise` выполнен мгновенно, или находится в состоянии ожидания.
275275
````
276276

277277
Теперь, рассмотрим несколько практических примеров того, как `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) {

0 commit comments

Comments
 (0)