AsyncGenerator.prototype.next()
Baseline Widely 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 Language Specification # sec-asyncgenerator-prototype-next |
ブラウザーの互換性
BCD tables only load in the browser