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.
Phương thức next() của các thực thể AsyncGenerator trả về giá trị tiếp theo trong dãy.
Cú pháp
js
next()
next(value)
Tham số
valueOptional-
Giá trị tùy chọn dùng để sửa đổi trạng thái nội bộ của generator. Giá trị được truyền cho phương thức
next()sẽ được nhận bởiyield.
Giá trị trả về
Một Promise khi được giải quyết trả về một Object với hai thuộc tính:
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ề:
js
// Một tác vụ bất đồng bộ. Giả sử nó đang làm gì đó hữu ích hơn
// trong thực tế.
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 }
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ì.
js
// Một tác vụ bất đồng bộ. Giả sử nó đang làm gì đó hữu ích hơn
// trong thực tế.
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();
// Không có nhật ký ở bước này: giá trị đầu tiên được gửi qua `next` bị mất
console.log(await asyncGen.next(1)); // { value: undefined, done: false }
// Ghi nhật ký 2: giá trị được gửi qua `next`
console.log(await asyncGen.next(2)); // { value: undefined, done: false }
}
main();
Đặc điểm kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-asyncgenerator-prototype-next> |
Tương thích trình duyệt
Xem thêm
async function*- Hướng dẫn Iterators và generators