--- title: AsyncFunction slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction tags: - Constructor - Construtor - Experimental - JavaScript - Reference - Referência(2) translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction ---
{{JSRef}}

O construtor AsyncFunction cria um novo objeto {{jsxref("Statements/async_function", "async function")}}. Em JavaScript cada função assíncrona é atualmente um objeto do tipo AsyncFunction.

Note queAsyncFunction não é um objeto global. Ele poderia ser obtido analisando o seguinte código:

Object.getPrototypeOf(async function(){}).constructor

Sintaxe

new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)

Parameters

arg1, arg2, ... argN
Nomes que vão ser usados pela função como argumentos formais. Cada um deve ser uma string que corresponde a um indentificador JavaScript válido ou uma lista das strings separadas com uma vírgula; por exemplo "x", "oValor", or "a,b".
functionBody
Uma string contendo as declarações JavaScript que compõem a definição da função.

Descrição

Objetos {{jsxref("Statements/async_function", "async function")}} criados com o construtor AsyncFunction são tratados quando a função é criada. Isso é menos eficiente que declarar uma função async com a {{jsxref("Statements/async_function", "expression async function")}} e chama-la com seu código, porque essas funções são tratadas com o resto do código.

Todos os argumentos passado para a função são tratados como nomes dos identificadores dos parâmetros na função que vai ser criada, na ordem que eles são passados.

Nota: {{jsxref("Statements/async_function", "async functions")}} criadas com o construtor AsyncFunction não cria closures para seus contextos de criação; elas sempre criadas no escopo global. Quando rodar eles, eles só poderão acessar suas variáveis local e as globais, mas não as que estão no escopo que o construtor foi AsyncFunction chamado. Isso é diferente de usar {{jsxref("Global_Objects/eval", "eval")}} com código para uma expressão async function.

Invocar o construtor AsyncFunction como uma função (sem usar o operador new) tem o mesmo efeito de invocá-lo como um construtor.

Propriedas

AsyncFunction.length
A propriedade tamanho do construtor da AsyncFunction cujo valor é 1.
{{jsxref("AsyncFunction.prototype")}}
Permite a adição de propriedades para todos os objetos async function.

AsyncFunction prototype object

Propriedades

{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype', 'Propriedades')}}

AsyncFunction instances

Instância AsyncFunction herdam métodos e propriedades do {{jsxref("AsyncFunction.prototype")}}. Com todos os contrutores, que podem mudar o prototype do objeto construtor para fazer mudanças em todas as instâncias do AsyncFunction.

Exemplos

Criando uma async function a partir do construtor de uma 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); // imprime 30 após 4 seconds
});

Especificações

Especificação Situação Comentário
{{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}} {{Spec2('ESDraft')}} Definição inicial no ES2017.

Compatibilidade com navegadores

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer  Edge Opera Safari (WebKit)
Basic support {{CompatChrome(55)}} {{CompatGeckoDesktop("52.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatOpera(42)}} {{CompatUnknown}}
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support {{CompatUnknown}} {{CompatUnknown}} {{CompatGeckoMobile("52.0")}} {{CompatUnknown}} {{CompatOpera(42)}} {{CompatUnknown}} {{CompatChrome(55)}}

Veja também