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 Latest Draft (ECMA-262)
The definition of 'AsyncFunction object' in that specification.
Draft Початкове визначення у ES2017.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
AsyncFunctionChrome Full support 55Edge Full support 15Firefox Full support 52IE No support NoOpera Full support 42Safari Full support 10.1WebView Android Full support 55Chrome Android Full support 55Firefox Android Full support 52Opera Android Full support 42Safari iOS Full support 10.3Samsung Internet Android Full support 6.0nodejs Full support 7.6.0
Full support 7.6.0
Full support 7.0.0
Disabled
Disabled From version 7.0.0: this feature is behind the --harmony runtime flag.
prototypeChrome Full support 55Edge Full support 15Firefox Full support 52IE No support NoOpera Full support 42Safari Full support 10.1WebView Android Full support 55Chrome Android Full support 55Firefox Android Full support 52Opera Android Full support 42Safari iOS Full support 10.3Samsung Internet Android Full support 6.0nodejs Full support 7.6.0
Full support 7.6.0
Full support 7.0.0
Disabled
Disabled From version 7.0.0: this feature is behind the --harmony runtime flag.

Legend

Full support  
Full support
No support  
No support
User must explicitly enable this feature.
User must explicitly enable this feature.

Див. також