async

async es una palabra clave relacionada con operaciones asincrónicas que solo está disponible en ES7, y está estrechamente relacionada con Promise y Generator.

Sintaxis

async function name([param[, param[, ... param]]]) { statements }
  • name: nombre de la función.
  • param: nombre del parámetro a pasar a la función.
  • statements: declaraciones del cuerpo de la función.

Valor de retorno

La función async devuelve un objeto Promise, y se puede usar el método then para agregar funciones de devolución de llamada.

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

Una función async puede contener una expresión await. Cuando se ejecuta una función async, si encuentra await, pausa la ejecución; cuando se completa la operación asincrónica disparada, reanuda la ejecución de la función async y devuelve el valor resuelto.

La palabra clave await solo es válida dentro de async function. Si usas await fuera del cuerpo de una async function, solo obtendrás un error de sintaxis.

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

El operador await se usa para esperar un objeto Promise; solo se puede usar dentro de una función asíncrona async function.

Sintaxis

[return_value] = await expression;
  • expression: un objeto Promise o cualquier valor que se desee esperar.

Valor de retorno

Devuelve el resultado de procesamiento del objeto Promise. Si lo que se espera no es un objeto Promise, devuelve el valor en sí.

Si se pasa un Promise a un operador await, await esperará a que el Promise se procese normalmente y devolverá su resultado de procesamiento.

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

Normalmente, después del comando await va un objeto Promise, pero también puede ir seguido de otros valores, como cadenas, valores booleanos, números y funciones ordinarias.

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

Formas en que await maneja diferentes expresiones que le siguen:

  • Objeto Promise: await pausa la ejecución, espera a que el objeto Promise se resuelva (resolve), luego reanuda la ejecución de la función async y devuelve el valor resuelto.
  • Objeto no Promise: devuelve directamente el valor correspondiente.