async

async — это ключевое слово, связанное с асинхронными операциями, которое было введено только в ES7, и тесно связано с Promise и Generator.

Синтаксис

async function name([param[, param[, ... param]]]) { statements }
  • name: Имя функции.
  • param: Имена параметров, передаваемых в функцию.
  • statements: Операторы тела функции.

Возвращаемое значение

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

async function helloAsync(){ return "helloAsync"; } console.log(helloAsync()) // Promise {<resolved>: "helloAsync"} helloAsync().then(v=>{ console.log(v); // helloAsync })

Асинхронная функция может содержать выражения await. Когда асинхронная функция выполняется, если она встречает await, она сначала приостанавливает выполнение, а после завершения вызванной асинхронной операции возобновляет асинхронную функцию и возвращает разрешённое значение.

Ключевое слово await допустимо только внутри асинхронной функции. Если вы используете await вне тела асинхронной функции, вы получите только синтаксическую ошибку.

function testAwait(){ return new Promise((resolve) => { setTimeout(function(){ console.log("testAwait"); resolve(); }, 1000); }); } async function helloAsync(){ await testAwait(); console.log("helloAsync"); } helloAsync(); // testAwait // helloAsync

await

Оператор await используется для ожидания объекта Promise, и его можно использовать только внутри async-функции.

Синтаксис

[return_value] = await expression;
  • expression: объект Promise или любое значение, которого нужно дождаться.

Возвращаемое значение

Возвращает результат обработки объекта Promise. Если ожидаемое значение не является объектом Promise, возвращается само значение.

Если в оператор await передан Promise, await будет ждать нормального завершения Promise и вернёт результат его обработки.

function testAwait (x) { return new Promise(resolve => { setTimeout(() => { resolve(x); }, 2000); }); } async function helloAsync() { var x = await testAwait ("hello world"); console.log(x); } helloAsync (); // hello world

Обычно после команды await следует объект Promise, но после неё также могут следовать другие значения, такие как строки, логические значения, числа и обычные функции.

function testAwait(){ console.log("testAwait"); } async function helloAsync(){ await testAwait(); console.log("helloAsync"); } helloAsync(); // testAwait // helloAsync

То, как await обрабатывает различные выражения, следующие за ним:

  • Объект Promise: await приостанавливает выполнение, ожидает разрешения объекта Promise, затем возобновляет асинхронную функцию и возвращает разрешённое значение.
  • Объект не-Promise: напрямую возвращает соответствующее значение.