1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
---
title: Funciones asíncronas
slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction
translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction
original_slug: Web/JavaScript/Referencia/Objetos_globales/Funcionesasíncronas
browser-compat: javascript.builtins.AsyncFunction
---
{{JSRef}}
El **constructor `AsyncFunction`** crea un nuevo objeto {{jsxref("Statements/async_function", "async function", "", 1)}}.
En JavaScript, cada función asíncrona es un objeto `AsyncFunction`.
Nota: `AsyncFunction` _no_ es un objeto global. Este puede ser obtenido como resultado del siguiente código.
```js
Object.getPrototypeOf(async function(){}).constructor
```
## Sintaxis
```js
new AsyncFunction(arg0, functionBody)
new AsyncFunction(arg0, arg1, functionBody)
new AsyncFunction(arg0, arg1, ...argN, functionBody)
```
### Parámetros
- `arg1, arg2, ... argN`
- : Nombres a ser usados por la función como los nombres de los argumentos. Cada uno debe ser una cadena que corresponda a un identificador válido en JavaScript (cualquier [identificador](/es/docs/Glossary/Identifier), [parámetro rest](/es/docs/Web/JavaScript/Reference/Functions/rest_parameters), o [parámetro desestructurado](/es/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment), opcionalmente con un valor por defecto), o una lista de tales cadenas separadas por comas.
Así mismo, los parámetros se procesan de la misma manera que las declaraciones de funciones, aceptando espacios y comentarios. Por ejemplo: `"x", "theValue = 42", "[a, b] /* numbers */"` — o `"x, theValue = 42, [a, b] /* numbers */"`. (`"x, theValue = 42", "[a, b]"` es también correcto, pero muy confuso para leer).
- : `functionBody`
- : Una cadena que contiene las sentencias de JavaScript que componen la definición de la función.
## Descripción
Los objetos {{jsxref("Statements/async_function", "async function")}} creados con el constructor `AsyncFunction` son procesados en el momento que la función es creada. Esto es menos eficiente que declarar una función asincrona con un {{jsxref("Statements/async_function", "async function expression")}} y llamarla con eso en tu código , ya que las funciones son procesadas junto al resto del código.
Todos los argumentos que son pasados a la función son tratados por los nombres de los identificadores de los parámetros en la función creada, en el orden en que son pasados a la función.
> **Nota:** Las {{jsxref("Statements/async_function", "async functions", "", 1)}} creadas con el constructor `AsyncFunction` no crean
> [_closures_](/es/docs/Web/JavaScript/Closures) en sus contextos creados, siempre son creados en el contexto global.
>
> Cuando se ejecutan, solamente podran acceder a sus variables locales y globales, no a las variables de otros contextos en el cual
> el constructor `AsyncFuction` fue llamado.
>
> Esto es distinto de usar {{jsxref("Global_Objects/eval", "eval")}} con código para
> una expresión de función asíncrona.
Invocar el constructor `AsyncFunction` coomo una función (sin usar el operador `new`) tiene el mismo efecto que invocarlo como un constructor.
## Ejemplos
### Creando una función asíncrona con el constructor AsyncFunction()
```js
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
let AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
let a = new AsyncFunction('a',
'b',
'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);');
a(10, 20).then(v => {
console.log(v); // imprime 30 después de 4 segundos
});
```
## Especificaciones
{{Specifications}}
## Compatibilidad con navegadores
{{Compat}}
## Véase también
- {{jsxref("Statements/async_function", "async function function", "", 1)}}
- {{jsxref("Operators/async_function", "async function expression", "", 1)}}
- {{jsxref("Global_Objects/Function", "Function")}}
- {{jsxref("Statements/function", "function statement", "", 1)}}
- {{jsxref("Operators/function", "function expression", "", 1)}}
- {{jsxref("Functions", "Functions and function scope", "", 1)}}
|