AsyncFunction

Конструктор 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

Див. також