Expresión de función asíncrona

La palabra clave async function puede ser utilizada para definir funciones async dento de expresiones.

También se pueden definir funciones asíncronas utilizando un enunciado de función asíncrona.

Sintaxis

async function [nombre]([param1[, param2[, ..., paramN]]]) {
   enunciados
}

A partir de ES2015 (ES6), también se pueden emplear funciones flecha.

Parámetros

name
El nombre de la función. Puede ser omitida, en cuy caso la función es anónima. El nombre es sólo local al cuerpo de la función The name is only local to the function body.
paramN
El nombre de un argumento a ser pasado a la función.
statements
Los enunciados que componen el cuerpo de la función.

Descripción

Una expresión async function es miuy similar, y casi tiene la misma sintaxis que, una async function statement. La principal diferencia entre una expresión async function y un enunciado async function es el nombre de la función, que puede ser omitido en una expresión async function para crear funciones anonymous. Una expresión async function puede ser utilizada como un IIFE (Expresión de función inmediatamente invocada, Immediately Invoked Function Expression) que se ejecuta tan rápido como es definida. Ver el capítulo sobre funciones para tener más información.

Ejemplos

Ejemplo sencillo

function resuelve2SegundosDespues(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
};


const agregar= async function(x) { // Expresión de una función asíncrona asignada a una variable
  let a = await resuelve2SegundosDespues(20);
  let b = await resuelve2SegundosDespues(30);
  return x + a + b;
};

agregar(10).then(v => {
  console.log(v);  // imprime 60 después de 4 segundos.
});


(async function(x) { // expresión de una función asíncrona utilizada como una IIFE
  let p_a = resuelve2SegundosDespues(20);
  let p_b = resuelve2SegundosDespues(30);
  return x + await p_a + await p_b;
})(10).then(v => {
  console.log(v);  // imprime 60 después de 2 segundos.
});

Especificaciones

Especificación
ECMAScript Latest Draft (ECMA-262)
La definición de 'async function' en esta especificación.

Compatibilidad de los navegadores

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome para AndroidFirefox para AndroidOpera para AndroidSafari en iOSSamsung InternetNode.js
async function expressionChrome Soporte completo 55Edge Soporte completo 15Firefox Soporte completo 52IE Sin soporte NoOpera Soporte completo 42Safari Soporte completo 10.1WebView Android Soporte completo 55Chrome Android Soporte completo 55Firefox Android Soporte completo 52Opera Android Soporte completo 42Safari iOS Soporte completo 10.3Samsung Internet Android Soporte completo 6.0nodejs Soporte completo 7.6.0
Soporte completo 7.6.0
Soporte completo 7.0.0
Deshabilitado
Deshabilitado From version 7.0.0: this feature is behind the --harmony runtime flag.

Leyenda

Soporte completo  
Soporte completo
Sin soporte  
Sin soporte
El usuario debe de habilitar explícitamente esta característica.
El usuario debe de habilitar explícitamente esta característica.

Ver también