01. Async Functions

Асинхронные функции появились в результате комбинации возможностей Promise и генераторов. Кто-то заметил, что можно использовать генераторы для того, что бы приостановить выполнение программы до тех пор, пока Promise не будет установлен, а потом вернуть значение Promise в место его вызова и продолжить:

const result = yield promise;

Так можно выполнять асинхронную функцию, последовательно переходя от Promise к Promise, при этом выполнение каждого Promise происходит асинхронно:

function* asyncFunction() {
  const result = yield asyncOperation1();
  const outcome = yield asyncOperation2(result);
  return outcome;
}

Основное преимущество асинхронных функций в том, что они позволяют описывать асинхронные операции так, что они выглядят как синхронные. Формирование цепочки Promise заменяется на последовательность вызовов асинхронных функций и исполнение кода выглядит так, как будто он выполняется синхронно.

Преимущества асинхронных функций:

  • Concise and clean code (более простая ментальная модель).

  • Error handling (обработка ошибки может происходить там же, где и вызов асинхронной функции).

  • Conditionals

  • Легче обрабатывать промежуточные значения (их можно передать в цепочке асинхронных вызовов).

  • Error stacks

  • Debugging

  • С Async/await можно использовать циклы, т.е. подходит для serial-операций.

Last updated