AsyncGenerator.prototype.next()
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2020年1月以降、すべてのブラウザーで利用可能です。
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();
仕様書
| 仕様書 |
|---|
| ECMAScript® 2027 Language Specification> # sec-asyncgenerator-prototype-next> |