AsyncFunction
Конструктор Async
Function
создаёт новый объект 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 |