--- 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 Async
Function
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, ... argN
x
", "oValor
", or "a,b
".functionBody
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.
AsyncFunction.length
AsyncFunction
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
.
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çã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)}} |