AsyncIterator

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.

* Some parts of this feature may have varying levels of support.

Một đối tượng AsyncIterator là đối tượng tuân theo giao thức async iterator bằng cách cung cấp phương thức next() trả về một promise được thực hiện thành một đối tượng kết quả iterator. Đối tượng AsyncIterator.prototype là một đối tượng toàn cục ẩn mà tất cả các async iterator tích hợp sẵn đều kế thừa từ đó. Nó cung cấp phương thức [Symbol.asyncIterator]() trả về chính đối tượng async iterator, giúp async iterator cũng trở thành async iterable.

Lưu ý rằng AsyncIterator không phải là đối tượng toàn cục, mặc dù nó sẽ trở thành như vậy trong tương lai với đề xuất async iterator helpers. Đối tượng AsyncIterator.prototype được chia sẻ bởi tất cả các async iterator tích hợp sẵn có thể được lấy bằng đoạn mã sau:

js
const AsyncIteratorPrototype = Object.getPrototypeOf(
  Object.getPrototypeOf(Object.getPrototypeOf((async function* () {})())),
);

Mô tả

Hiện tại, async iterator tích hợp duy nhất của JavaScript là đối tượng AsyncGenerator được trả về bởi các hàm async generator. Có một số async iterator tích hợp khác trong web API, chẳng hạn như async iterator của ReadableStream.

Mỗi async iterator này có một đối tượng prototype riêng, định nghĩa phương thức next() được sử dụng bởi async iterator cụ thể đó. Tất cả các đối tượng prototype này đều kế thừa từ AsyncIterator.prototype, cung cấp phương thức [Symbol.asyncIterator]() trả về chính đối tượng async iterator, khiến async iterator cũng là async iterable.

Note: AsyncIterator.prototype không triển khai [Symbol.iterator](), do đó các async iterator không phải là sync iterable theo mặc định.

Phương thức instance

AsyncIterator.prototype[Symbol.asyncDispose]()

Gọi và đợi phương thức return() của this, nếu nó tồn tại. Điều này triển khai giao thức async disposable và cho phép nó được giải phóng khi sử dụng với await using.

AsyncIterator.prototype[Symbol.asyncIterator]()

Trả về chính đối tượng async iterator. Điều này cho phép các đối tượng async iterator cũng là async iterable.

Ví dụ

Sử dụng async iterator như một async iterable

Tất cả các async iterator tích hợp sẵn cũng là async iterable, vì vậy bạn có thể sử dụng chúng trong vòng lặp for await...of:

js
const asyncIterator = (async function* () {
  yield 1;
  yield 2;
  yield 3;
})();
(async () => {
  for await (const value of asyncIterator) {
    console.log(value);
  }
})();
// Logs: 1, 2, 3

Đặc tả

Specification
ECMAScript® 2027 Language Specification
# sec-asynciteratorprototype

Tương thích trình duyệt

Xem thêm