Конструктор AsyncFunction створює новий об'єкт асинхронної функції. У JavaScript кожна асинхронна функція насправді є об'єктом AsyncFunction.
Зауважте, що AsyncFunction не є глобальним об'єктом. Його можна отримати за допомогою наступного коду:
Object.getPrototypeOf(async function(){}).constructor
Синтаксис
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
Параметри
arg1, arg2, ... argN- Імена, що використовуватиме функція як формальні імена аргументів. Кожне має бути рядком, що відповідає коректному ідентифікатору JavaScript, або списком таких рядків, розділених комою; наприклад, "
x", "theValue" або "a,b". functionBody- Рядок, що містить інструкції JavaScript, які складають визначення функції.
Опис
Об'єкти асинхронних функцій, створені конструктором AsyncFunction, розбираються, коли створюється функція. Це менш ефективно, ніж оголосити асинхронну функцію через async function та викликати її у вашому коді, тому що такі функції розбираються з рештою коду.
Усі аргументи, передані у функцію, сприймаються як імена ідентифікаторів параметрів функції, яка має бути створена, у тому порядку, в якому вони передані.
Заувага: асинхронні функції, створені конструктором AsyncFunction, не утворюють замикань з контекстом свого створення; вони завжди створюються у глобальній області видимості.
Під час виконання вони матимуть доступ тільки до власних локальних змінних та до глобальних, але не до змінних області видимості, в якій був викликаний конструктор AsyncFunction.
Це відрізняється від використання eval з кодом виразу асинхронної функції.
Використання конструктора AsyncFunction в якості функції (без оператора new) має такий самий ефект, як і виклик його в якості конструктора.
Властивості
AsyncFunction.length- Властивість
lengthконструктораAsyncFunction(її значення дорівнює1). AsyncFunction.prototype- Дозволяє додавати властивості до усіх об'єктів асинхронних функцій.
Прототип AsyncFunction
Властивості
AsyncFunction.constructor- Початковим значенням є
AsyncFunction. AsyncFunction.prototype[@@toStringTag]- Вертає "AsyncFunction".
Екземпляри AsyncFunction
Екземпляри AsyncFunction успадковують методи та властивості від AsyncFunction.prototype.
Як в усіх конструкторах, ви можете змінювати об'єкт конструктора prototype, щоб вносити зміни до усіх екземплярів AsyncFunction.
Приклади
Створення асинхронної функції конструктором AsyncFunction
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); // виводить 30 через 4 секунди
});
Специфікації
| Специфікація | Статус | Коментар |
|---|---|---|
| ECMAScript (ECMA-262) The definition of 'AsyncFunction object' in that specification. |
Living Standard | Початкове визначення у ES2017. |
Сумісність з веб-переглядачами
BCD tables only load in the browser