Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.

Función async

BaselineWidely available

La declaración de funciónasync define unafunción asíncrona, la cual devuelve un objetoAsyncFunction.

Es posible definir también funciones asíncronas a través de unaexpresión de función async.

Pruébalo

function resolveAfter2Seconds() {  return new Promise((resolve) => {    setTimeout(() => {      resolve("resolved");    }, 2000);  });}async function asyncCall() {  console.log("calling");  const result = await resolveAfter2Seconds();  console.log(result);  // Expected output: "resolved"}asyncCall();

Sintaxis

async function name([param[, param[, ... param]]]) {   statements}

Parámetros

name

El nombre de la función.

param

El nombre de un argumento que se debe pasar a la función.

statements

Las declaraciones que conforman el cuerpo de la función.

Valor de retorno

Un objetoAsyncFunction, que representa una función asíncrona que ejecuta el código contenido dentro de la función.

Descripción

Cuando se llama a una funciónasync, esta devuelve un elementoPromise. Cuando la funciónasync devuelve un valor,Promise se resolverá con el valor devuelto. Si la funciónasync genera una excepción o algún valor,Promise se rechazará con el valor generado.

Una funciónasync puede contener una expresiónawait, la cual pausa la ejecución de la función asíncrona y espera la resolución de laPromise pasada y, a continuación, reanuda la ejecución de la funciónasync y devuelve el valor resuelto.

Nota:La finalidad de las funcionesasync/await es simplificar el comportamiento del uso síncrono de promesas y realizar algún comportamiento específico en un grupo dePromises. Del mismo modo que lasPromises son semejantes a las devoluciones de llamadas estructuradas,async/await se asemejan a una combinación de generadores y promesas.

Ejemplos

Ejemplo sencillo

js
function resolveAfter2Seconds(x) {  return new Promise((resolve) => {    setTimeout(() => {      resolve(x);    }, 2000);  });}async function add1(x) {  const a = await resolveAfter2Seconds(20);  const b = await resolveAfter2Seconds(30);  return x + a + b;}add1(10).then((v) => {  console.log(v); // prints 60 after 4 seconds.});async function add2(x) {  const p_a = resolveAfter2Seconds(20);  const p_b = resolveAfter2Seconds(30);  return x + (await p_a) + (await p_b);}add2(10).then((v) => {  console.log(v); // prints 60 after 2 seconds.});

Advertencia:No se deben confundirawait yPromise.all Enadd1, la ejecución se suspende durante dos segundos correspondientes al primer operadorawait, y luego durante otros dos segundos correspondientes al segundoawait. El segundo temporizador no se crea hasta que el primero no se haya disparado ya. Enadd2, ambos temporizadores se crean y, acto seguido, ambos recibenawait. Esto provoca la resolución en dos segundos y no cuatro, ya que los temporizadores se ejecutaron de manera simultánea. Sin embargo, ambas llamadasawait aún pueden ejecutarse en series, no en paralelo: estono constituye ninguna aplicación automática dePromise.all. Si se desea aplicarawait a dos o más promesas en paralelo, es preciso utilizarPromise.all.

Reescritura de una cadena de promesas con una funciónasync

Una API que devuelva unaPromise tendrá como resultado una cadena de promesas, y dividirá la función en muchas partes. Estudie este código:

js
function getProcessedData(url) {  return downloadData(url) // returns a promise    .catch((e) => {      return downloadFallbackData(url); // returns a promise    })    .then((v) => {      return processDataInWorker(v); // returns a promise    });}

Es posible reescribirlo utilizando un solo operadorasync de esta manera:

js
async function getProcessedData(url) {  let v;  try {    v = await downloadData(url);  } catch (e) {    v = await downloadFallbackData(url);  }  return processDataInWorker(v);}

Observe que, en el ejemplo anterior, no hay ninguna instrucciónawait dentro de la instrucciónreturn, porque el valor de retorno de unaasync function queda implícitamente dentro de unPromise.resolve.

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# sec-async-function-definitions

Compatibilidad con navegadores

Véase también

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp