HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.
View in English Always switch to English
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ção async function define uma função assíncrona, que retorna um objeto AsyncFunction.
async function
AsyncFunction
Você também pode definir funções assíncronas usando uma expressão async function.
expressão async function
async function nome([param[, param[, ... param]]]) { instruções }
nome
O nome da função.
param
O nome de um parâmetro a ser passado para a função.
instruções
As instruções que compõem o corpo da função.
Quando uma função assíncrona é chamada, ela retorna uma Promise. Quando a função assíncrona retorna um valor, a Promise será resolvida com o valor retornado. Quando a função assíncrona lança uma exceção ou algum valor, a Promise será rejeitada com o valor lançado.
Promise
Uma função assíncrona pode conter uma expressão await, que pausa a execução da função assíncrona e espera pela resolução da Promise passada, e depois retoma a execução da função assíncrona e retorna o valor resolvido.
await
Nota: A proposta das funções async/await é de simplificar o uso de forma síncrona das Promises e executar alguns procedimentos em um grupo de Promises. Assim como Promises são similares a callbacks estruturados, funções async/await são similares à junção de generators com Promises.
async/await
Promises
callbacks
generators
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. });
async
Uma API que retorna uma Promise vai resultar em uma cadeia de Promises 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ção async 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ção await na instrução do return, porque o valor retornado de uma função async é implícitamente passado por um Promise.resolve.
return
Promise.resolve
Enable JavaScript to view this browser compatibility table.