Generator.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 September 2016.
Phương thức next() của các thực thể Generator trả về một đối tượng với hai thuộc tính done và value. Bạn cũng có thể cung cấp tham số cho phương thức next để gửi một giá trị tới generator.
Cú pháp
next()
next(value)
Tham số
valueOptional-
Giá trị để gửi tới generator.
Giá trị này sẽ được gán là kết quả của biểu thức
yield. Ví dụ, trongvariable = yield expression, giá trị được truyền cho hàm.next()sẽ được gán chovariable.
Giá trị trả về
Một Object với hai thuộc tính:
Ngoại lệ
TypeError-
Được ném ra nếu generator đang chạy.
Ví dụ
>Sử dụng next()
Ví dụ sau cho thấy một generator và đối tượng mà phương thức next trả về:
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 }
Sử dụng next() với danh sách
Trong ví dụ này, getPage nhận một danh sách và "phân trang" nó thành các đoạn có kích thước pageSize. Mỗi lần gọi next sẽ yield một đoạn như vậy.
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 }
Gửi giá trị tới generator
Trong ví dụ này, next được gọi với một giá trị.
Note: Lần gọi đầu tiên không ghi nhật ký bất cứ điều gì, vì generator ban đầu không yield bất cứ thứ gì.
function* gen() {
while (true) {
const value = yield;
console.log(value);
}
}
const g = gen();
g.next(1); // Trả về { value: undefined, done: false }
// Không có nhật ký ở bước này: giá trị đầu tiên được gửi qua `next` bị mất
g.next(2); // Trả về { value: undefined, done: false }
// Ghi nhật ký 2
Đặc điểm kỹ thuật
| Thông số kỹ thuật |
|---|
| ECMAScript® 2027 Language Specification> # sec-generator.prototype.next> |
Tương thích trình duyệt
Xem thêm
function*- Hướng dẫn Iterators và generators