WritableStreamDefaultWriter
注意:此功能在 Web Workers 中可用。
WritableStreamDefaultWriter 接口是 Streams API 的一部分,由 WritableStream.getWriter() 返回。创建后,它会将 writer 锁定到 WritableStream,确保没有其他流可以写入底层接收器。
构造函数
WritableStreamDefaultWriter()-
创建一个新的
WritableStreamDefaultWriter对象实例。
实例属性
WritableStreamDefaultWriter.closed只读-
允许你编写响应流结束的代码。返回一个 Promise,如果流关闭则 fulfilled,如果流出错或 writer 的锁被释放则 rejected。
WritableStreamDefaultWriter.desiredSize只读-
返回填充流内部队列所需的期望大小。
WritableStreamDefaultWriter.ready只读-
返回一个
Promise,当流的内部队列的期望大小从非正值变为正值时解决,表明不再应用背压。
实例方法
WritableStreamDefaultWriter.abort()-
中止流,表明生产者无法再成功写入流,流将被立即移至错误状态,任何已排队的写入都将被丢弃。
WritableStreamDefaultWriter.close()-
关闭关联的可写流。
WritableStreamDefaultWriter.releaseLock()-
释放 writer 对相应流的锁定。释放锁定后,writer 将不再处于活动状态。如果在释放锁定后关联的流出错,writer 将从此开始以相同方式出错;否则,writer 将显示为已关闭。
WritableStreamDefaultWriter.write()-
将传入的数据块写入
WritableStream及其底层接收器,然后返回一个Promise,该 Promise 解决以指示写入操作的成功或失败。
示例
以下示例显示了使用自定义接收器和 API 提供的队列策略创建 WritableStream。然后它调用一个名为 sendMessage() 的函数,并将新创建的流和一个字符串传递进去。在此函数内部,它调用流的 getWriter() 方法,该方法返回 WritableStreamDefaultWriter 的一个实例。使用 forEach() 调用将字符串的每个块写入流。最后,write() 和 close() 返回 Promise,这些 Promise 被处理以处理块和流的成功或失败。
const list = document.querySelector("ul");
async function sendMessage(message, writableStream) {
// defaultWriter is of type WritableStreamDefaultWriter
const defaultWriter = writableStream.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(message);
try {
for (const chunk of encoded) {
await defaultWriter.ready;
await defaultWriter.write(chunk);
console.log("Chunk written to sink.");
}
// Call ready again to ensure that all chunks are written
// before closing the writer.
await defaultWriter.ready;
await defaultWriter.close();
console.log("All chunks written");
} catch (err) {
console.log("Error:", err);
}
}
const decoder = new TextDecoder("utf-8");
const queuingStrategy = new CountQueuingStrategy({ highWaterMark: 1 });
let result = "";
const writableStream = new WritableStream(
{
// Implement the sink
write(chunk) {
return new Promise((resolve, reject) => {
const buffer = new ArrayBuffer(1);
const view = new Uint8Array(buffer);
view[0] = chunk;
const decoded = decoder.decode(view, { stream: true });
const listItem = document.createElement("li");
listItem.textContent = `Chunk decoded: ${decoded}`;
list.appendChild(listItem);
result += decoded;
resolve();
});
},
close() {
const listItem = document.createElement("li");
listItem.textContent = `[MESSAGE RECEIVED] ${result}`;
list.appendChild(listItem);
},
abort(err) {
console.log("Sink error:", err);
},
},
queuingStrategy,
);
sendMessage("Hello, world.", writableStream);
您可以在我们的 简单写入器示例 中找到完整的代码。
规范
| 规范 |
|---|
| Streams # default-writer-class |
浏览器兼容性
加载中…