--- title: ReadableStream slug: Web/API/ReadableStream tags: - API - Fetch - ReadableStream - 引用 - 接口 translation_of: Web/API/ReadableStream ---
{{APIRef("Fetch")}}
流操作API 中的ReadableStream 接口呈现了一个可读取的二进制流操作。Fetch API 通过 {{domxref("Response")}} 的属性 {{domxref("Body.body", "body")}} 提供了一个具体的 ReadableStream 对象。
tee 方法(tee本意是将高尔夫球放置在球座上)tees 了可读流,返回包含两个{{domxref("ReadableStream")}} 实例分支的数组,每个元素接收了相同的传输数据。getIterator 方法的别名。下面的例子,创建了一个智能的 {{domxref("Response")}} 来流式化从别的资源处取得的HTML 片段。
它演示了 {{domxref("ReadableStream")}} 与 {{domxref("Uint8Array")}} 的协同用法。
fetch("https://www.example.org/").then((response) => {
const reader = response.body.getReader();
const stream = new ReadableStream({
start(controller) {
// 下面的函数处理每个数据块
function push() {
// "done"是一个布尔型,"value"是一个Uint8Array
reader.read().then(({ done, value }) => {
// 判断是否还有可读的数据?
if (done) {
// 告诉浏览器已经结束数据发送
controller.close();
return;
}
// 取得数据并将它通过controller发送给浏览器
controller.enqueue(value);
push();
});
};
push();
}
});
return new Response(stream, { headers: { "Content-Type": "text/html" } });
});
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('Streams','#rs-class','ReadableStream')}} | {{Spec2('Streams')}} | 初始定义 |
{{Compat("api.ReadableStream")}}