async function
. Em Javascript todas as funções asíncronas são na verdade objectos AsyncFunction.
Note-se que AsyncFunction
não é um objecto global. Pode ser obtido da seguinte forma.
Object.getPrototypeOf(async function(){}).constructor
Síntaxe
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
Parâmetros
arg1, arg2, ... argN
- Nomes usados pela função como nomes formais de argumentos . Cada um dos argumentos tem que ser uma string que corresponde a um identificador válido JavaScript ou uma lista separada por vírgulas; por exemplo "
x
", "theValue
", ou "a,b
". functionBody
- Uma string com os termos JavaScript que fazem parte da definição da função.
Descrição
Os objectos async function
criados com o constructor AsyncFunction
passam por um parsing quando as funções são criadas. Isto é menos eficiente que declarar uma função asíncrona com async function expression
e chamá-la no código porque dessa forma a função passa pelo parsing ao mesmo tempo que o resto do código.
Todos os argumentos passados à função são tratados como os nomes dos identificadores dos parâmetros na função a ser criada, na ordem que são declarados.
Nota: async functions
criado com o constructor AsyncFunction
não estão encapsulados ao contexto da sua criação, são sempre criados no âmbito global.
Ao correr, podem aceder às suas prórpias variáveis e às variáveis globais, no entanto não conseguem aceder às que estão no contexto donde o constructor AsyncFunction
foi chamado. Isto é diferente de chamar eval
com código para uma função asíncrona.
A invocação do constructor AsyncFunction
como uma função, i.e. sem usar o operador new
tem o mesmo efeito que invocá-lo como constructor.
Invoking the AsyncFunction
constructor as a function (without using the new
operator) has the same effect as invoking it as a constructor.
Propriedades
AsyncFunction.length
- A propriedade comprimento do constructor do
AsyncFunction
, cujo valor é 1. AsyncFunction.prototype
- Permite adicionar propriedades a todos os objectos que são funções asíncronas.
AsyncFunction prototype object
Propriedades
Instâncias de AsyncFunction
As instâncias de AsyncFunction
herdam métodos e propriedades do AsyncFunction.prototype
. Tal como com qualquer constructor pode-se mudar o prototype object para aplicar mudanças a todos as instâncias de AsyncFunction
.
Exemplos
Exemplo de criação de uma função async a partir de um constructor AsyncFunction
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
var a = new AsyncFunction('a',
'b',
'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);');
a(10, 20).then(v => {
console.log(v); // prints 30 after 4 seconds
});
Especificações
Specification | Status | Comment |
---|---|---|
ECMAScript (ECMA-262) The definition of 'AsyncFunction object' in that specification. |
Living Standard | Definição inicial em ES2017. |
Compatibilidade de navegadores
BCD tables only load in the browser