Конструктор AsyncFunction создает новый объект async function. В JavaScript любая асинхронная функция фактически является объектом AsyncFunction.
Обратите внимание, что AsyncFunction не является глобальным объектом. Её можно получить, выполнив следующий код.
Object.getPrototypeOf(async function(){}).constructor
Синтаксис
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
Параметры
arg1, arg2, ... argN- Имена, используемые функцией как формальные имена аргументов. Каждое имя должно быть строкой, которая соответствует действительному идентификатору JavaScript или списку таких строк, разделенных запятой; например, "
x", "theValue", или "a,b". functionBody- Строка, содержащая в себе определение функции в исходном коде JavaScript .
Описание
Объекты async function, созданные с помощью AsyncFunction constructor будут распарсены в момент, когда функция создается. Это менее эффективно, чем объявлять асинхронную функцию с помощью async function expression и вызывать ее внутри вашего кода, поскольку такие функции анализируются с остальной частью кода.
Все аргументы, переданные функции, рассматриваются как имена идентификаторов параметров в создаваемой функции в том порядке, в котором они передаются.
Обратите внимание: объекты async functions созданные с помощью AsyncFunction constructor , не создают замыкания на создающие их контексты; Они всегда создаются в глобальной области видимости. При их запуске они смогут получить доступ только к своим локальным переменным и к глобальным переменным, но не имеют доступа к тем областям видимости, в которых был вызван AsyncFunction constructor. Это отличается от использования eval с кодом для async function.
Вызов AsyncFunction constructor как функции (без использования оператора new ) имеет тот же эффект, что и вызов его как конструктора.
Свойства
AsyncFunction.length- Свойство length AsyncFunction constructor, значение которого равно 1.
AsyncFunction.prototype- Позволяет добавлять свойства ко всем объектам async function.
AsyncFunction prototype object
Свойства
Экземпляры AsyncFunction
Экземпляры AsyncFunction наследуют методы и свойства от AsyncFunction.prototype. Как и для всех конструкторов, вы можете изменить объект-прототип конструктора, чтобы внести изменения во все экземпляры AsyncFunction.
Примеры
Создание async function с помощью AsyncFunction constructor
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); // напечатает 30 через 4 секунды
});
Спецификации
| Спецификация | Статус | Комментарий |
|---|---|---|
| ECMAScript (ECMA-262) Определение 'AsyncFunction object' в этой спецификации. |
Живой стандарт | Изначальное определение в ES2017. |
Совместимость с браузерами
| Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Edge | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| Базовая поддержка | 55 | 52.0 (52.0) | ? | ? | 42 | ? |
| Возможность | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| Базовая поддержка | ? | ? | 52.0 (52.0) | ? | 42 | ? | 55 |