AsyncGenerator.prototype.next()
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Метод next() экземпляров AsyncGenerator возвращает следующее значение в последовательности.
Синтаксис
next() next(value)
Параметры
-
valueНеобязательный - Необязательное значение, используемое для изменения внутреннего состояния генератора. Значение, переданное методу
next(), будет полученоyield
Возвращаемое значение
Объект Promise, который при разрешении возвращает Object с двумя свойствами:
-
done - Булево значение:
-
true, если генератор прошел конец своего потока управления. В этом случаеvalueуказывает возвращаемое значение генератора (которое может быть undefined). -
false, если генератор способен производить больше значений.
-
-
value - Любое значение JavaScript, сгенерированное (yielded) или возвращенное генератором.
Примеры
Использование next()
Следующий пример показывает генератор и объект, который возвращает метод next:
// An async task. Pretend it's doing something more useful
// in practice.
function delayedValue(time, value) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(value), time);
});
}
async function* createAsyncGenerator() {
yield delayedValue(500, 1);
yield delayedValue(500, 2);
yield delayedValue(500, 3);
}
const asyncGen = createAsyncGenerator();
asyncGen.next().then((res) => console.log(res)); // { value: 1, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: 2, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: 3, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: undefined, done: true }
Отправка значений в генератор
В этом примере next вызывается со значением.
Примечание: Первый вызов ничего не выводит, поскольку генератор изначально ничего не генерировал.
// An async task. Pretend it's doing something more useful
// in practice.
function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(resolve, time);
});
}
async function* createAsyncGenerator() {
while (true) {
await sleep(500);
const value = yield;
console.log(value);
}
}
async function main() {
const asyncGen = createAsyncGenerator();
// No log at this step: the first value sent through `next` is lost
console.log(await asyncGen.next(1)); // { value: undefined, done: false }
// Logs 2: the value sent through `next`
console.log(await asyncGen.next(2)); // { value: undefined, done: false }
}
main();
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
next |
63 |
79 |
55 |
50 |
12 |
63 |
55 |
46 |
12 |
8.0 |
63 |
12 |
1.0.0 |
1.0 |
10.0.0 |
Смотрите также
© 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/Global_Objects/AsyncGenerator/next