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 |
瀏覽器相容性
載入中…