--- 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 ---
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
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
arg1, arg2, ... argNx", "oValor", or "a,b".functionBodyObjetos {{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.
AsyncFunction.lengthAsyncFunction cujo valor é 1.AsyncFunction prototype objectAsyncFunction instancesInstâ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.
AsyncFunctionfunction 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ção | Situação | Comentário |
|---|---|---|
| {{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}} | {{Spec2('ESDraft')}} | Definição inicial no ES2017. |
| 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)}} |