Baseline Widely available
A declaração async function
define uma função assÃncrona, que retorna um objeto AsyncFunction
.
Você também pode definir funções assÃncronas usando uma 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.
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.
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
.
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 de Promise
com uma função 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
.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4