AsyncGenerator.prototype.next()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
next()
メソッドは、シーケンス内の次の値を返します。
構文
js
asyncGeneratorObject.next()asyncGeneratorObject.next(value)
引数
value
省略可ジェネレーターの内部状態を変更するために使用するオプションの値。
next()
メソッドに渡された値は、yield
で受け取ります。
返値
例
next() の使用
次の例は、単純なジェネレーターとnext
メソッドが返すオブジェクトを示しています。
js
// 非同期タスクです。実際にはもっと有益なことを使用していることを// 想定してください。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
が値付きで呼び出されます。
メモ:最初の呼び出しは、ジェネレーターが最初は何も出力しなかったため、何もログ出力しません。
js
// 非同期タスクです。実際にはもっと有益なことを使用していることを// 想定してください。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();
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-asyncgenerator-prototype-next |