AsyncFunction

O constructor da função Async cria um novo objecto 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

See also