Generator.prototype.next()
next() 方法是 Generator 例項的一個方法,它會返回一個包含 done 和 value 兩個屬性的物件。你也可以向 next 方法傳遞一個引數,用於向生成器傳送值。
語法
js
next()
next(value)
引數
value可選-
要傳送給生成器的值。
該值將被賦給
yield表示式的結果。例如,在variable = yield expression中,傳遞給.next()函式的值將被賦給variable。
返回值
一個包含兩個屬性的 Object
異常
TypeError-
如果生成器已在執行,則丟擲錯誤。
示例
使用 next()
下面的示例展示了一個生成器以及 next 方法返回的物件
js
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen(); // Generator { }
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
使用 next() 處理列表
在此示例中,getPage 接收一個列表,並將其“分頁”成大小為 pageSize 的塊。每次呼叫 next 都會產生一個這樣的塊。
js
function* getPage(list, pageSize = 1) {
for (let index = 0; index < list.length; index += pageSize) {
yield list.slice(index, index + pageSize);
}
}
const list = [1, 2, 3, 4, 5, 6, 7, 8];
const page = getPage(list, 3); // Generator { }
page.next(); // { value: [1, 2, 3], done: false }
page.next(); // { value: [4, 5, 6], done: false }
page.next(); // { value: [7, 8], done: false }
page.next(); // { value: undefined, done: true }
向生成器傳送值
在此示例中,next 使用一個值進行了呼叫。
注意: 第一次呼叫不會記錄任何內容,因為生成器最初沒有產生任何內容。
js
function* gen() {
while (true) {
const value = yield;
console.log(value);
}
}
const g = gen();
g.next(1); // Returns { value: undefined, done: false }
// No log at this step: the first value sent through `next` is lost
g.next(2); // Returns { value: undefined, done: false }
// Logs 2
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-generator.prototype.next |
瀏覽器相容性
載入中…