Skip to content

Commit b1a89c3

Browse files
committed
1-js/11-async/08-async-await translated - fix #1
1 parent d839af0 commit b1a89c3

4 files changed

Lines changed: 23 additions & 23 deletions

File tree

1-js/11-async/08-async-await/01-rewrite-async/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ loadJson('no-such-user.json')
3030
```
3131

3232
Тогда внешнему коду пришлось бы получать результат промиса самостоятельно (через `.then` или `await`). В нашем варианте это не обязательно.
33-
4. Брошенная из `loadJson` ошибка перехватывается с помощью `.catch`. Здесь нельзя использовать `await loadJson(…)`, так как мы находимся не в теле `async` функции.
33+
4. Выброшенная из `loadJson` ошибка перехватывается с помощью `.catch`. Здесь нельзя использовать `await loadJson(…)`, так как мы находимся не в теле функции `async`.

1-js/11-async/08-async-await/03-async-from-regular/solution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

2-
Это тот случай, когда знание о внутренннем устройстве `async/await` очень кстати.
2+
Это тот случай, когда понимание внутреннего устройства работы `async/await` очень кстати.
33

4-
Здесь нужно думать о вызове `async` функции, как о промисе. И просто воспользоваться `.then`:
4+
Здесь нужно думать о вызове функции `async`, как о промисе. И просто воспользоваться `.then`:
55
```js run
66
async function wait() {
77
await new Promise(resolve => setTimeout(resolve, 1000));

1-js/11-async/08-async-await/03-async-from-regular/task.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

2-
# Вызовите async функцию из "обычной"
2+
# Вызовите asyncфункцию из "обычной"
33

4-
Есть "обычная" функция. Как можно внутри неё получить результат выполнения `async` функции?
4+
Есть "обычная" функция. Как можно внутри неё получить результат выполнения `async`функции?
55

66
```js
77
async function wait() {
@@ -12,7 +12,7 @@ async function wait() {
1212

1313
function f() {
1414
// ...что здесь написать?
15-
// чтобы вызвать wait() и дождаться результата "10" от async функции
15+
// чтобы вызвать wait() и дождаться результата "10" от asyncфункции
1616
// не забывайте, здесь нельзя использовать "await"
1717
}
1818
```

1-js/11-async/08-async-await/article.md

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

33
Существует специальный синтаксис для работы с промисами, который называется "async/await". Он очень простой и наглядный.
44

5-
## Async функции
5+
## Асинхронные функции
66

7-
Объявление функции можно начать с ключевого слова `async`:
7+
Объявление асинхронной функции можно начать с ключевого слова `async`:
88

99
```js
1010
async function f() {
1111
return 1;
1212
}
1313
```
1414

15-
Функция, перед объявлением которой находится ключевое слово "async", всегда возвращает промис. Значения, отличные от промисов, будут оборачиваться в успешно завершившийся промис автоматически.
15+
Функция, перед объявлением которой находится ключевое слово "async", всегда возвращает промис. Значения других типов оборачиваются в завершившийся успешно промис автоматически.
1616

17-
Например, эта функция возвратит промис в `fulfilled` состоянии с результатом `1`:
17+
Например, эта функция возвратит выполненый промис с результатом `1`:
1818

1919
```js run
2020
async function f() {
@@ -34,14 +34,14 @@ async function f() {
3434
f().then(alert); // 1
3535
```
3636

37-
Получается, ключевое слово `async` перед функцией гарантирует, что эта функция в любом случае вернёт промис. Согласитесь, достаточно просто? Но это ещё не всё. Есть другое ключевое слово – `await`, которое можно использовать только внутри `async` функций.
37+
Получается, ключевое слово `async` перед функцией гарантирует, что эта функция в любом случае вернёт промис. Согласитесь, достаточно просто? Но это ещё не всё. Есть другое ключевое слово – `await`, которое можно использовать только внутри `async`функций.
3838

3939
## Await
4040

4141
Синтаксис:
4242

4343
```js
44-
// работает только внутри async функций
44+
// работает только внутри asyncфункций
4545
let value = await promise;
4646
```
4747

@@ -68,7 +68,7 @@ f();
6868

6969
В данном примере выполнение функции остановится на строке `(*)` до тех пор, пока промис не перейдёт в состояние `fulfilled`. Это произойдёт через секунду после запуска функции. После чего в переменную `result` будет записан результат выполнения промиса, и браузер отобразит alert-окно «готово!».
7070

71-
Обратите внимание, хотя `await` заставляет JavaScript дожидаться выполнения промиса, это не отнимает ресурсов процессора. Пока промис не выполнится, JS движок может заниматься другими задачами – выполнять прочие скрипты, обрабатывать события и т.п.
71+
Обратите внимание, хотя `await` заставляет JavaScript дожидаться выполнения промиса, это не отнимает ресурсов процессора. Пока промис не выполнится, JS-движок может заниматься другими задачами – выполнять прочие скрипты, обрабатывать события и т.п.
7272

7373
По сути, это просто "синтаксический сахар" для получения результата промиса, более наглядный, чем `promise.then`.
7474

@@ -84,7 +84,7 @@ function f() {
8484
}
8585
```
8686

87-
Ошибки не будет, если мы укажем ключевое слово `async` перед объявлением функции. Как было сказано раньше, `await` можно использовать только внутри `async` функций.
87+
Ошибки не будет, если мы укажем ключевое слово `async` перед объявлением функции. Как было сказано раньше, `await` можно использовать только внутри `async`функций.
8888
````
8989
9090
Давайте перепишем пример `showAvatar()` из раздела <info:promise-chaining> с помощью `async/await`:
@@ -123,15 +123,15 @@ showAvatar();
123123
Получилось очень просто и читаемо, правда? Гораздо лучше, чем раньше.
124124
125125
````smart header="`await` нельзя использовать на верхнем уровне вложенности"
126-
Программисты, узнав об `await`, часто пытаются использовать эту возможность на верхнем уровне вложенности (вне тела функции). Но из-за того, что `await` работает только внутри `async` функций, так сделать не получится:
126+
Программисты, узнав об `await`, часто пытаются использовать эту возможность на верхнем уровне вложенности (вне тела функции). Но из-за того, что `await` работает только внутри `async`функций, так сделать не получится:
127127
128128
```js run
129129
// SyntaxError на верхнем уровне вложенности
130130
let response = await fetch('/article/promise-chaining/user.json');
131131
let user = await response.json();
132132
```
133133
134-
Можно обернуть этот код в анонимную `async` функцию, тогда всё заработает:
134+
Можно обернуть этот код в анонимную `async`функцию, тогда всё заработает:
135135
136136
```js run
137137
(async () => {
@@ -143,7 +143,7 @@ let user = await response.json();
143143
144144
145145
````
146-
````smart header="`await` работает с \"thenable\" объектами"
146+
````smart header="`await` работает с объектами типа \"thenable\""
147147
Любой объект может не быть промисом, но реализовать их интерфейс (быть промис-совместимым). Если у объекта можно вызвать метод `then`, этого достаточно, чтобы использовать его с `await`.
148148

149149
В примере ниже, экземпляры класса `Thenable` будут работать вместе с `await`:
@@ -173,8 +173,8 @@ f();
173173
Когда `await` получает объект с `.then` (не являющийся промисом), JavaScript автоматически запускает этот метод, передавая ему аргументы – встроенные функции `resolve` и `reject`. `await` приостановит дальнейшее выполнение кода, пока любая из этих функций не будет вызвана (в примере, это строка `(*)`). После чего выполнение кода продолжится с результатом `resolve` или `reject` соответственно.
174174
````
175175
176-
````smart header="Async методы"
177-
Можно создавать async методы:
176+
````smart header="Асинхронные методы"
177+
Для объявления асинхронного метода достаточно написать `async` перед именем:
178178
179179
```js run
180180
class Waiter {
@@ -189,7 +189,7 @@ new Waiter()
189189
.wait()
190190
.then(alert); // 1
191191
```
192-
Как и с async функциями, такой метод гарантированно возвращает промис и в его теле можно использовать `await`.
192+
Как и с асинхронными функциями, такой метод гарантированно возвращает промис и в его теле можно использовать `await`.
193193
194194
````
195195
## Обработка ошибок
@@ -252,7 +252,7 @@ async function f() {
252252
f();
253253
```
254254

255-
Если из этой функции убрать блок `try..catch`, промис, сгенерированный вызовом async функции `f()`, возвратится в состоянии rejected. Мы можем использовать метод `.catch` промиса, чтобы обработать ошибку:
255+
Если из функции `f()` убрать блок `try..catch`, она будет возвращать завершившийся с ошибкой промис (в состоянии rejected). В этом случае мы можем использовать метод `.catch` промиса, чтобы обработать ошибку:
256256

257257
```js run
258258
async function f() {
@@ -265,12 +265,12 @@ f().catch(alert); // TypeError: failed to fetch // (*)
265265
*/!*
266266
```
267267

268-
Если забыть добавить `.catch` возвращаемому rejected промису, будет сгенерирована ошибка "Uncaught promise error" и информация об этом будет выведена в консоль. Такие ошибки тоже можно отловить и обработать, об этом подробно написано в разделе <info:promise-error-handling>.
268+
Если забыть добавить `.catch` возвращаемому `rejected`промису, будет сгенерирована ошибка "Uncaught promise error" и информация об этом будет выведена в консоль. Такие ошибки тоже можно отловить и обработать, об этом подробно написано в разделе <info:promise-error-handling>.
269269

270270
```smart header="`async/await` и `promise.then/catch`"
271271
При работе с `async/await`, `.then` используется не часто, так как `await` автоматически ожидает завершения выполнения промиса. В этом случае, обычно (но не всегда) гораздо удобнее перехватывать ошибки используя `try..catch`, нежели чем `.catch`.
272272

273-
Но на верхнем уровне вложенности (вне `async` функций) `await` использовать нельзя, поэтому `.then/catch` для обработки финального результата или ошибок – обычная практика.
273+
Но на верхнем уровне вложенности (вне `async`функций) `await` использовать нельзя, поэтому `.then/catch` для обработки финального результата или ошибок – обычная практика.
274274

275275
Так сделано в строке `(*)` в примере выше.
276276
```

0 commit comments

Comments
 (0)