выражение async function*
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Ключевые слова async function* можно использовать для определения асинхронной генераторной функции внутри выражения.
Вы также можете определить асинхронные генераторные функции, используя async function* объявление.
Попробуйте
async function joinAll(generator) {
let str = "";
for await (const val of generator()) {
str += val;
}
return str;
}
joinAll(async function* () {
yield await Promise.resolve("a");
yield await Promise.resolve("b");
yield await Promise.resolve("c");
}).then((str) => console.log(str));
// Expected output: "abc"
Синтаксис
async function* (param0) {
statements
}
async function* (param0, param1) {
statements
}
async function* (param0, param1, /* …, */ paramN) {
statements
}
async function* name(param0) {
statements
}
async function* name(param0, param1) {
statements
}
async function* name(param0, param1, /* …, */ paramN) {
statements
}
Примечание: Выражение-оператор не может начинаться с ключевых слов async function, чтобы избежать неоднозначности с async function* объявлением. Ключевые слова async function начинают выражение только тогда, когда они появляются в контексте, который не может принимать операторы.
Параметры
-
nameНеобязательный - Имя функции. Может быть опущено, в этом случае функция является анонимной. Имя является локальным только для тела функции.
-
paramNНеобязательный - Имя формального параметра функции. Синтаксис параметров см. в справочнике по функциям.
-
statementsНеобязательный - Операторы, составляющие тело функции.
Описание
async function* выражение очень похоже и имеет почти такой же синтаксис, как async function* объявление. Основное отличие между async function* выражением и async function* объявлением — это имя функции, которое может быть опущено в async function* выражениях для создания анонимных функций. async function* выражение может использоваться как IIFE (Immediately Invoked Function Expression), которая выполняется сразу после определения, позволяя создавать специальные асинхронные итерируемые объекты. Также см. главу о функциях для получения дополнительной информации.
Примеры
Использование выражения async function*
Следующий пример определяет безымянную асинхронную генераторную функцию и присваивает ее x. Функция возвращает квадрат своего аргумента:
const x = async function* (y) {
yield Promise.resolve(y * y);
};
x(6)
.next()
.then((res) => console.log(res.value)); // 36
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
async_generator_function |
63 |
79 |
57 |
50 |
12 |
63 |
57 |
46 |
12 |
8.0 |
63 |
12 |
1.0.0 |
1.0 |
10.0.0 |
См. также
- Руководство по функциям
- Функции
async function*AsyncGeneratorFunction- Протоколы итерации
yieldyield*
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/async_function*