AsyncFunction
=============

Baseline Widely available
-------------------------

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.

* Learn more
* See full compatibility
* Report feedback
O **construtor `AsyncFunction`** cria um novo objeto `async function`. Em JavaScript cada função assíncrona é atualmente um objeto do tipo `AsyncFunction`.

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


```js
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 `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 `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:** `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 `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.

Propriedades
------------

**`AsyncFunction.length`**

A propriedade tamanho do construtor da `AsyncFunction` cujo valor é 1.

`AsyncFunction.prototype`

Permite a adição de propriedades para todos os objetos async function.

`AsyncFunction` prototype object
--------------------------------

### Propriedades

{{page('/pt-BR/docs/Web/JavaScript/Reference/Global\_Objects/AsyncFunction/prototype', 'Propriedades')}}`AsyncFunction` instances
-------------------------

Instância `AsyncFunction` herdam métodos e propriedades do `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`


```js
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
--------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-async-function-objects |

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Veja também
-----------

* `async function function`
* `async function expression`
* `Function`
* `function statement`
* `function expression`
* Funções e escopo de função (en-US)