--- title: AsyncFunction slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction tags: - JavaScript - Довідка - Конструктор translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction ---
Конструктор Async
Function
створює новий об'єкт {{jsxref("Statements/async_function", "асинхронної функції")}}. У JavaScript кожна асинхронна функція насправді є об'єктом AsyncFunction
.
Зауважте, що AsyncFunction
не є глобальним об'єктом. Його можна отримати за допомогою наступного коду:
Object.getPrototypeOf(async function(){}).constructor
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
arg1, arg2, ... argN
x
", "theValue
" або "a,b
".functionBody
Об'єкти {{jsxref("Statements/async_function", "асинхронних функцій")}}, створені конструктором AsyncFunction
, розбираються, коли створюється функція. Це менш ефективно, ніж оголосити асинхронну функцію через {{jsxref("Statements/async_function", "async function")}} та викликати її у вашому коді, тому що такі функції розбираються з рештою коду.
Усі аргументи, передані у функцію, сприймаються як імена ідентифікаторів параметрів функції, яка має бути створена, у тому порядку, в якому вони передані.
Заувага: {{jsxref("Statements/async_function", "асинхронні функції")}}, створені конструктором AsyncFunction
, не утворюють замикань з контекстом свого створення; вони завжди створюються у глобальній області видимості.
Під час виконання вони матимуть доступ тільки до власних локальних змінних та до глобальних, але не до змінних області видимості, в якій був викликаний конструктор AsyncFunction
.
Це відрізняється від використання {{jsxref("Global_Objects/eval", "eval")}} з кодом виразу асинхронної функції.
Використання конструктора AsyncFunction
в якості функції (без оператора new
) має такий самий ефект, як і виклик його в якості конструктора.
AsyncFunction.length
length
конструктора AsyncFunction
(її значення дорівнює 1
).AsyncFunction
AsyncFunction
Екземпляри AsyncFunction
успадковують методи та властивості від {{jsxref("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 секунди });
Специфікація | Статус | Коментар |
---|---|---|
{{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}} | {{Spec2('ESDraft')}} | Початкове визначення у ES2017. |
{{Compat("javascript.builtins.AsyncFunction")}}