WritableStreamDefaultWriter: write() 方法
注意:此功能在 Web Workers 中可用。
write() 方法是 WritableStreamDefaultWriter 接口的一个方法,它将传入的数据块写入 WritableStream 及其底层接收器,然后返回一个 Promise,该 Promise 在写入操作成功或失败时解析。
请注意,“成功”的含义取决于底层接收器;它可能表示数据块已被接受,而不一定表示它已安全保存到最终目的地。
语法
js
write(chunk)
参数
chunk-
要传递给
WritableStream的二进制数据块。
返回值
一个 Promise,在写入成功时以 undefined 解析,如果写入失败或流在写入过程启动之前出错,则会拒绝。
异常
TypeError-
目标流不是一个可写流,或者它没有所有者。
示例
下面的示例演示了如何创建具有自定义接收器和 API 提供的队列策略的 WritableStream。然后,它调用一个名为 sendMessage() 的函数,并将新创建的流和一个字符串作为参数传递。在此函数内部,它调用流的 getWriter() 方法,该方法返回一个 WritableStreamDefaultWriter 实例。调用 forEach() 来将字符串的每个块写入流。最后,write() 和 close() 返回的 Promise 会被处理,以应对数据块和流的成功或失败。
js
const list = document.querySelector("ul");
function sendMessage(message, writableStream) {
// defaultWriter is of type WritableStreamDefaultWriter
const defaultWriter = writableStream.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(message);
encoded.forEach((chunk) => {
defaultWriter.ready
.then(() => defaultWriter.write(chunk))
.then(() => {
console.log("Chunk written to sink.");
})
.catch((err) => {
console.log("Chunk error:", err);
});
});
// Call ready again to ensure that all chunks are written
// before closing the writer.
defaultWriter.ready
.then(() => {
defaultWriter.close();
})
.then(() => {
console.log("All chunks written");
})
.catch((err) => {
console.log("Stream 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 # ref-for-default-writer-write①② |
浏览器兼容性
加载中…