You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/11-async/08-async-await/article.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -45,7 +45,7 @@ f().then(alert); // 1
45
45
let value =await promise;
46
46
```
47
47
48
-
Ключевое слово `await` заставит интерпретатор JavaScript "встать на паузу" до тех пор, пока промис справа от `await` не выполнится. После чего он вернёт свой результат и выполнение кода продолжится.
48
+
Ключевое слово `await` заставит интерпретатор JavaScript ждать до тех пор, пока промис справа от `await` не выполнится. После чего он вернёт свой результат и выполнение кода продолжится.
49
49
50
50
В этом примере промис успешно выполнится через 1 секунду:
51
51
@@ -143,8 +143,8 @@ let user = await response.json();
143
143
144
144
145
145
````
146
-
````smart header="`await` работает с объектами типа \"thenable\""
147
-
Любой объект может не быть промисом, но реализовать их интерфейс (быть промис-совместимым). Если у объекта можно вызвать метод `then`, этого достаточно, чтобы использовать его с `await`.
146
+
````smart header="`await` работает с объектами \"thenable\"–объектами"
147
+
Как и `promise.then`, `await` позволяет работать с промис–совместимыми объектами. Идея в том, что если у объекта можно вызвать метод `then`, этого достаточно, чтобы использовать его с `await`.
148
148
149
149
В примере ниже, экземпляры класса `Thenable` будут работать вместе с `await`:
150
150
@@ -161,7 +161,7 @@ class Thenable {
161
161
};
162
162
163
163
asyncfunctionf() {
164
-
// код "встанет на паузу" на 1 секунду,
164
+
// код будет ждать 1 секунду,
165
165
// после чего значение result станет равным 2
166
166
let result =awaitnewThenable(1);
167
167
alert(result);
@@ -170,7 +170,7 @@ async function f() {
170
170
f();
171
171
```
172
172
173
-
Когда `await` получает объект с `.then` (не являющийся промисом), JavaScript автоматически запускает этот метод, передавая ему аргументы – встроенные функции `resolve` и `reject`. `await` приостановит дальнейшее выполнение кода, пока любая из этих функций не будет вызвана (в примере, это строка `(*)`). После чего выполнение кода продолжится с результатом `resolve` или `reject` соответственно.
173
+
Когда `await` получает объект с `.then`, не являющийся промисом, JavaScript автоматически запускает этот метод, передавая ему аргументы – встроенные функции `resolve` и `reject`. Затем`await` приостановит дальнейшее выполнение кода, пока любая из этих функций не будет вызвана (в примере, это строка `(*)`). После чего выполнение кода продолжится с результатом `resolve` или `reject` соответственно.
174
174
````
175
175
176
176
````smart header="Асинхронные методы"
@@ -216,7 +216,7 @@ async function f() {
216
216
}
217
217
```
218
218
219
-
Но есть отличие, промис может завершиться с ошибкой не сразу, а через некоторое время. В этом случае `await` дождётся его завершения и только потом выбросит исключение.
219
+
Но есть отличие, на практике промис может завершиться с ошибкой не сразу, а через некоторое время. В этом случае `await` дождётся его завершения и только потом выбросит исключение.
220
220
221
221
Такие ошибки можно отлавливать, используя `try..catch`, как будто это обычный `throw`:
Если забыть добавить `.catch` возвращаемому `rejected`–промису, будет сгенерирована ошибка "Uncaught promise error" и информация об этом будет выведена в консоль. Такие ошибки тоже можно отловить и обработать, об этом подробно написано в разделе <info:promise-error-handling>.
269
269
270
270
```smart header="`async/await` и `promise.then/catch`"
271
-
При работе с `async/await`, `.then` используется не часто, так как `await` автоматически ожидает завершения выполнения промиса. В этом случае, обычно (но не всегда) гораздо удобнее перехватывать ошибки используя `try..catch`, нежели чем `.catch`.
271
+
При работе с `async/await`, `.then` используется нечасто, так как `await` автоматически ожидает завершения выполнения промиса. В этом случае, обычно (но не всегда) гораздо удобнее перехватывать ошибки используя `try..catch`, нежели чем `.catch`.
272
272
273
273
Но на верхнем уровне вложенности (вне `async`–функций) `await` использовать нельзя, поэтому `.then/catch` для обработки финального результата или ошибок – обычная практика.
274
274
@@ -299,7 +299,7 @@ let results = await Promise.all([
299
299
300
300
Например, мы сделали два вызова:
301
301
- `setTimeout(handler, 0)`, который запустит `handler` с нулевой задержкой.
302
-
- `let x = await f()`, функция `f()` – асинхронная, но вернёт resolved промис сразу же.
302
+
- `let x = await f()`, функция `f()` – асинхронная, но вернёт завершившийся успешно промис сразу же.
303
303
304
304
Что выполнится сначала, если `await` находится *ниже* по коду, чем `setTimeout`?
0 commit comments