ReadableStreamDefaultReader

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.

Note: This feature is available in Web Workers.

Giao diện ReadableStreamDefaultReader của API Streams biểu diễn một trình đọc mặc định có thể dùng để đọc dữ liệu luồng được cung cấp từ mạng, chẳng hạn như một yêu cầu fetch.

ReadableStreamDefaultReader có thể được dùng để đọc từ một ReadableStream có nguồn nền tảng thuộc bất kỳ kiểu nào, khác với ReadableStreamBYOBReader, vốn chỉ có thể dùng với các luồng có thể đọc có nguồn byte nền tảng.

Lưu ý rằng việc truyền không sao chép từ nguồn nền tảng chỉ được hỗ trợ cho các nguồn byte nền tảng tự động cấp phát bộ đệm. Nói cách khác, luồng phải được khởi tạo với cả type="bytes"autoAllocateChunkSize. Với mọi nguồn nền tảng khác, luồng sẽ luôn đáp ứng các yêu cầu đọc bằng dữ liệu từ hàng đợi nội bộ.

Bộ khởi tạo

ReadableStreamDefaultReader()

Tạo và trả về một thể hiện đối tượng ReadableStreamDefaultReader.

Thuộc tính thể hiện

ReadableStreamDefaultReader.closed Read only

Trả về một Promise được hoàn tất khi luồng đóng, hoặc bị từ chối nếu luồng phát sinh lỗi hay khóa của trình đọc bị giải phóng. Thuộc tính này cho phép bạn viết mã phản hồi khi quá trình streaming kết thúc.

Phương thức thể hiện

ReadableStreamDefaultReader.cancel()

Trả về một Promise được giải quyết khi luồng bị hủy. Gọi phương thức này báo hiệu rằng phía tiêu thụ không còn quan tâm đến luồng nữa. Đối số reason được cung cấp sẽ được chuyển cho nguồn nền tảng, nguồn này có thể dùng hoặc không dùng nó.

ReadableStreamDefaultReader.read()

Trả về một Promise cung cấp quyền truy cập tới khối dữ liệu tiếp theo trong hàng đợi nội bộ của luồng.

ReadableStreamDefaultReader.releaseLock()

Giải phóng khóa của trình đọc trên luồng.

Ví dụ

Trong ví dụ sau, một Response giả lập được tạo để truyền các đoạn HTML được tìm nạp từ một tài nguyên khác tới trình duyệt.

Ví dụ này minh họa việc sử dụng ReadableStream kết hợp với Uint8Array.

js
fetch("https://www.example.org/").then((response) => {
  const reader = response.body.getReader();
  const stream = new ReadableStream({
    start(controller) {
      // The following function handles each data chunk
      function push() {
        // "done" is a Boolean and value a "Uint8Array"
        return reader.read().then(({ done, value }) => {
          // Is there no more data to read?
          if (done) {
            // Tell the browser that we have finished sending data
            controller.close();
            return;
          }

          // Get the data and send it to the browser via the controller
          controller.enqueue(value);
          push();
        });
      }

      push();
    },
  });

  return new Response(stream, { headers: { "Content-Type": "text/html" } });
});

Thông số kỹ thuật

Specification
Streams
# default-reader-class

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

Xem thêm