blob: 445fc134d1f09ad2eff00778b9bef0a0ffd6de45 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
---
title: ReadableStream
slug: Web/API/ReadableStream
tags:
- API
- Fetch
- ReadableStream
- 引用
- 接口
translation_of: Web/API/ReadableStream
---
<p>{{APIRef("Fetch")}}</p>
<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Streams_API">流操作API</a> 中的<code>ReadableStream</code><span> 接口呈现了一个可读取的二进制流操作。</span><a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API">Fetch API</a><span> 通过 {{domxref("Response")}} 的属性 {{domxref("Body.body", "body")}} 提供了一个具体的 </span><code>ReadableStream</code><span> 对象。</span></p>
<h2 id="构造函数">构造函数</h2>
<dl>
<dt>{{domxref("ReadableStream.ReadableStream", "ReadableStream()")}}</dt>
<dd>创建并从给定的 Handler 返回一个可读流对象。</dd>
</dl>
<h2 id="属性">属性</h2>
<dl>
<dt>{{domxref("ReadableStream.locked")}} {{readonlyInline}}</dt>
<dd>locked 返回这个可读流是否被一个<a href="https://streams.spec.whatwg.org/#locked-to-a-reader" id="ref-for-locked-to-a-reader②">读取器锁定</a>。</dd>
</dl>
<h2 id="方法">方法</h2>
<dl>
<dt>{{domxref("ReadableStream.cancel()")}}</dt>
<dd>取消读取流,读取方发出一个信号,表示对这束流失去兴趣。可以传入 reason 参数表示取消原因,这个原因将传回给调用方。</dd>
<dt>{{domxref("ReadableStream.getIterator()")}}</dt>
<dd>创建一个异步的 ReadableStream 迭代器并将流锁定于其上。一旦流被锁定,其他读取器将不能读取它,直到它被释放。</dd>
<dt>{{domxref("ReadableStream.getReader()")}}</dt>
<dd>创建一个读取器并将流锁定于其上。一旦流被锁定,其他读取器将不能读取它,直到它被释放。</dd>
</dl>
<dl>
<dt>{{domxref("ReadableStream.pipeThrough()")}}</dt>
<dd>提供将当前流管道输出到一个 transform 流或 writable/readable 流对的链式方法。</dd>
</dl>
<dl>
<dt>{{domxref("ReadableStream.pipeTo()")}}</dt>
<dd>将当前 ReadableStream 管道输出到给定的 {{domxref("WritableStream")}},并返回一个 promise,输出过程成功时返回 fulfilled,在发生错误时返回 rejected。</dd>
<dt>{{domxref("ReadableStream.tee()")}}</dt>
<dd><code>tee</code> 方法(tee本意是将高尔夫球放置在球座上)<a href="https://streams.spec.whatwg.org/#tee-a-readable-stream" id="ref-for-tee-a-readable-stream②">tees</a> 了可读流,返回包含两个{{domxref("ReadableStream")}} 实例分支的数组,每个元素接收了相同的传输数据。</dd>
<dt>{{domxref("ReadableStream[@@asyncIterator]()")}}</dt>
<dd><code>getIterator</code> 方法的别名。</dd>
</dl>
<h2 id="示例">示例</h2>
<p>下面的例子,创建了一个智能的 {{domxref("Response")}} 来流式化从别的资源处取得的HTML 片段。</p>
<p>它演示了 {{domxref("ReadableStream")}} 与 {{domxref("Uint8Array")}} 的协同用法。</p>
<pre class="brush: js notranslate">fetch("https://www.example.org/").then((response) => {
const reader = response.body.getReader();
const stream = new ReadableStream({
start(controller) {
// 下面的函数处理每个数据块
function push() {
// "done"是一个布尔型,"value"是一个Unit8Array
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" } });
});</pre>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName('Streams','#rs-class','ReadableStream')}}</td>
<td>{{Spec2('Streams')}}</td>
<td>初始定义</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{Compat("api.ReadableStream")}}</p>
<h2 id="相关链接">相关链接</h2>
<ul>
<li><a href="https://whatwg-stream-visualizer.glitch.me/">WHATWG Stream Visualiser</a>, for a basic visualisation of readable, writable, and transform streams.</li>
</ul>
|