Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Funções assíncronas
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since abril de 2017.
A declaraçãoasync function define umafunção assíncrona, que retorna um objetoAsyncFunction.
Você também pode definir funções assíncronas usando umaexpressão async function.
In this article
Sintaxe
async function nome([param[, param[, ... param]]]) { instruções}nomeO nome da função.
paramO nome de um parâmetro a ser passado para a função.
instruçõesAs instruções que compõem o corpo da função.
Descrição
Quando uma função assíncrona é chamada, ela retorna umaPromise. Quando a função assíncrona retorna um valor, aPromise será resolvida com o valor retornado. Quando a função assíncrona lança uma exceção ou algum valor, aPromise será rejeitada com o valor lançado.
Uma função assíncrona pode conter uma expressãoawait, que pausa a execução da função assíncrona e espera pela resolução daPromise passada, e depois retoma a execução da função assíncrona e retorna o valor resolvido.
Nota:A proposta das funçõesasync/await é de simplificar o uso de forma síncrona dasPromises e executar alguns procedimentos em um grupo dePromises. Assim comoPromises são similares acallbacks estruturados, funçõesasync/await são similares à junção degenerators comPromises.
Exemplos
>Exemplo simples
function resolverDepoisDe2Segundos(x) { return new Promise((resolve) => { setTimeout(() => { resolve(x); }, 2000); });}async function adicionar1(x) { var a = resolverDepoisDe2Segundos(20); var b = resolverDepoisDe2Segundos(30); return x + (await a) + (await b);}adicionar1(10).then((v) => { console.log(v); // exibe 60 depois de 2 segundos.});async function adicionar2(x) { var a = await resolverDepoisDe2Segundos(20); var b = await resolverDepoisDe2Segundos(30); return x + a + b;}adicionar2(10).then((v) => { console.log(v); // exibe 60 depois de 4 segundos.});Reescrevendo uma cadeia dePromise com uma funçãoasync
Uma API que retorna umaPromise vai resultar em uma cadeia dePromises e separa a função em várias partes. Considere o seguinte código:
function pegarDadosProcessados(url) { return baixarDados(url) // retorna uma Promise .catch((e) => { return baixarDadosReservas(url); // retorna uma Promise }) .then((v) => { return processarDadosNoWorker(v); // retorna uma Promise });}pode ser escrita em uma única funçãoasync desta forma:
async function pegarDadosProcessados(url) { let v; try { v = await baixarDados(url); } catch (e) { v = await baixarDadosReservas(url); } return processarDadosNoWorker(v);}Note que no exemplo acima não tem a instruçãoawait na instrução doreturn, porque o valor retornado de uma funçãoasync é implícitamente passado por umPromise.resolve.
Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-async-function-definitions> |
Compatibilidade com navegadores
Loading…
Notas específicas do Firefox
- A funçãoexpression closure syntax não é permitida com funções assíncronas e irão lançar a exceçãoSyntaxError a partir do Firefox 55.