Modern JS Cheatsheet / Памятка по современному JavaScript: Async Await
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
### Async Await a_popova 03.10.17 в 15:12 |
|
|
В дополнение к [Промисам](#promises), появился новый синтаксис, который можно встретить для обработки асинхронного кода, который называется *async / await*. a_popova 03.10.17 в 15:12 Помимо [Промисов](#promises), вам может встретиться еще один синтаксис для обработки асинхронного кода - *async / await*. wizjer 11.10.17 в 08:09 |
||
|
Целью функций async/await является упрощение поведения при использовании промисов синхронно и выполнение какой-либо обработки группой промисов. Подобно тому, как промисы похожи на структурированные обратные вызовы, async/await подобны комбинации генераторов и промисов. ([Ссылка: MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)) a_popova 03.10.17 в 15:13 Цель функций async/await - упрощение поведения при синхронном использовании промисов и выполнение какой-либо обработки группы промисов. Промисы похожи на структурированные обратные вызовы, а async/await точно так же похожи на комбинацию генераторов и промисов. ([См: MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)) Tomatoknight 05.10.17 в 18:32 |
||
|
> **Примечание:** Вы должны понимать, что такое промисы и как они работают перед тем, как пытаться понять async / await, т.к. они основаны на промисах. a_popova 03.10.17 в 15:13 > **Примечание:** перед тем, как пытаться понять async / await, вы должны понимать, что такое промисы, и как они работают, поскольку async / await основаны на промисах. Tomatoknight 05.10.17 в 18:33 |
||
|
> **Примечание 2:** [*await* должен использоваться в *async* функции](https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9#f3f0), что означает, что вы не можете использовать await в верхнем уровне вашего кода, т.к. он не находится внутри async-функции. a_popova 03.10.17 в 15:14 |
||
|
#### Пример кода a_popova 03.10.17 в 19:50 |
||
|
```js a_popova 03.10.17 в 19:52 |
||
|
#### Объяснение с помощью примера кода a_popova 03.10.17 в 15:15 |
||
|
*Async / Await* построены на промисах, но они позволяют использовать более императивный стиль кода. a_popova 03.10.17 в 19:55 *Async / Await* построены на промисах, но они позволяют использовать более императивный стиль кода. wizjer 11.10.17 в 08:09 |
||
|
Оператор *async* превращает функцию в *промис*, в котором можно использовать оператор *await*. a_popova 03.10.17 в 20:09 Оператор *async* превращает функцию в *промис*, в котором можно использовать оператор *await*. wizjer 11.10.17 в 08:08 |
||
|
```js a_popova 03.10.17 в 20:18 |
||
|
Когда достигается оператор *return* async-функции, промис выполняется с возвращаемым значением. Если внутри async-функции выпадает ошибка, состояние промиса изменится на *rejected*. a_popova 03.10.17 в 20:22 Когда достигается оператор *return* async-функции, промис выполняется с возвращаемым значением. Если внутри async-функции выпадает ошибка, состояние промиса изменится на *rejected*. wizjer 11.10.17 в 08:10 |
||
|
Оператор *await* используется для ожидания выполнения *Промиса* и может быть использован только в теле *async*-функции. При этом выполнение кода приостанавливается, пока не будет выполнен промис. a_popova 03.10.17 в 20:03 |
||
|
> **Примечание :** *fetch* -- это Промис, который позволяет выполнить AJAX-запрос. a_popova 03.10.17 в 20:26 |
||
|
Давайте сначала посмотрим, как мы можем получить пользователя github с помощью промисов: a_popova 03.10.17 в 20:26 Давайте сначала посмотрим, как мы можем получить пользователя github с помощью промисов: wizjer 11.10.17 в 08:10 |
||
|
```js a_popova 03.10.17 в 20:27 |
||
|
Вот эквивалент с использованием *async / await*: a_popova 03.10.17 в 20:27 |
||
|
```js a_popova 03.10.17 в 20:30 ```js wizjer 11.10.17 в 08:11 |
||
|
Синтаксис *async / await* особенно удобен, когда вам нужно связывать взаимозависимые промисы. a_popova 03.10.17 в 20:30 |
||
|
Например, вам нужно получить token для того чтобы получить публикацию в блоге в базе данных, а затем информацию об авторе: a_popova 03.10.17 в 20:31 |
||
|
```js a_popova 03.10.17 в 20:31 |
||
|
> **Примечание :** Как вы видите, *try / catch* нужны для обработки ошибок. Но если вы используете *роутинг в express*, вы можете использовать middleware, чтобы избежать необходимости обработки ошибок и иметь приятный для чтения код. Смотрите [эту статью Alex Bazhenov](https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8-b8af872c0016) для получения дополнительной информации. a_popova 03.10.17 в 20:34 |
||
|
#### Дополнительные материалы a_popova 03.10.17 в 20:34 |
||
|
- [Async/Await - JavaScript.Info](https://javascript.info/async-await) a_popova 03.10.17 в 20:37 |
