WritableStream:close() 方法
注意:此功能在Web Workers中可用。
close()
方法是 WritableStream
接口的一部分,用于关闭关联的流。在调用此方法之前写入的所有块将在返回的 Promise fulfilled 之前发送。
这等效于使用 getWriter()
获取 WritableStreamDefaultWriter
,然后在其上调用 close()
。
语法
js
close()
参数
无。
返回值
一个 Promise
,当所有剩余的块在关闭之前成功写入时,它将以 undefined
作为 fulfilled 值,如果在此过程中遇到问题,则会以错误作为 rejected 值。
异常
TypeError
-
您尝试关闭的流已锁定。
示例
以下示例说明了 WritableStream
的几个特性。它展示了使用自定义接收器和 API 提供的排队策略创建 WritableStream
的过程。然后,它调用一个名为 sendMessage()
的函数,并将新创建的流和一个字符串作为参数传递。在该函数内部,它调用流的 getWriter()
方法,该方法返回一个 WritableStreamDefaultWriter
实例。forEach()
调用用于将字符串的每个块写入流。最后,write()
和 close()
返回 Promise,这些 Promise 用于处理块和流的成功或失败。请注意,为了能够在流本身调用 close()
,必须使用 defaultWriter.releaseLock();
断开写入器的连接。
js
function sendMessage(message, writableStream) {
// defaultWriter is of type WritableStreamDefaultWriter
const defaultWriter = writableStream.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(message, { stream: true });
encoded.forEach((chunk) => {
defaultWriter.ready
.then(() => {
defaultWriter.write(chunk);
})
.catch((err) => {
log("Chunk error:", err);
});
});
// Call ready again to ensure that all chunks are written
// before closing the writer.
defaultWriter.ready
.then(() => {
defaultWriter.releaseLock();
writableStream.close();
})
.then(() => {
log("All chunks written / stream closed.");
})
.catch((err) => {
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");
result += decoded;
resolve();
});
},
close() {
const listItem = document.createElement("li");
log(`[MESSAGE RECEIVED] ${result}`);
},
abort(err) {
log("Sink error:", err);
},
},
queuingStrategy,
);
log("Sending 'Hello, world.' message.");
sendMessage("Hello, world.", writableStream);
规范
规范 |
---|
流标准 # ref-for-ws-close① |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。