- AJAX 教程
- AJAX - 首頁
- AJAX - 什麼是 AJAX?
- AJAX - 歷史
- AJAX - 動態網站與靜態網站
- AJAX - 技術
- AJAX - 操作
- AJAX - XMLHttpRequest
- AJAX - 傳送請求
- AJAX - 請求型別
- AJAX - 處理響應
- AJAX - 處理二進位制資料
- AJAX - 提交表單
- AJAX - 檔案上傳
- AJAX - FormData 物件
- AJAX - 傳送 POST 請求
- AJAX - 傳送 PUT 請求
- AJAX - 傳送 JSON 資料
- AJAX - 傳送資料物件
- AJAX - 監控進度
- AJAX - 狀態碼
- AJAX - 應用
- AJAX - 瀏覽器相容性
- AJAX - 示例
- AJAX - 瀏覽器支援
- AJAX - XMLHttpRequest
- AJAX - 資料庫操作
- AJAX - 安全性
- AJAX - 問題
- Fetch API 基礎
- Fetch API - 基礎
- Fetch API 與 XMLHttpRequest
- Fetch API - 瀏覽器相容性
- Fetch API - 頭部資訊
- Fetch API - 請求
- Fetch API - 響應
- Fetch API - 主體資料
- Fetch API - 憑據
- Fetch API - 傳送 GET 請求
- Fetch API - 傳送 POST 請求
- Fetch API - 傳送 PUT 請求
- Fetch API - 傳送 JSON 資料
- Fetch API - 傳送資料物件
- Fetch API - 自定義請求物件
- Fetch API - 上傳檔案
- Fetch API - 處理二進位制資料
- Fetch API - 狀態碼
- 流 API 基礎
- 流 API - 基礎
- 流 API - 可讀流
- 流 API - 可寫流
- 流 API - 變換流
- 流 API - 請求物件
- 流 API - 響應主體
- 流 API - 錯誤處理
- AJAX 有用資源
- AJAX - 快速指南
- AJAX - 有用資源
- AJAX - 討論
流 API - 可寫流
可寫流是可以寫入資料的流。它們通常在 JavaScript 中由 WritableStream 物件表示。它在底層接收器上建立了一個抽象。底層接收器是寫入原始資料的更低級別的輸入/輸出接收器。
在可寫流中,寫入器寫入資料。它一次寫入一個塊,其中一個塊是一段資料。此外,您可以使用任何程式碼生成要寫入的塊,並且寫入器和相關的程式碼一起被稱為生產者。在一個流上,只允許一個寫入器寫入資料。此時,流被鎖定到該指定的寫入器,其他任何寫入器都不允許寫入。如果您希望另一個寫入器寫入,則必須在允許其他寫入器寫入之前終止第一個寫入器。每個寫入器都有自己的控制器來控制流。
此外,可寫流有一個內部佇列,就像可讀流一樣。它還跟蹤已寫入但未由底層接收器處理的塊。
WritableStream 介面
Stream API 支援三種類型的可寫流介面 -
WritableStream 介面
WritableStreamDefaultWriter 介面
WritableStreamDefaultController 介面
WritableStream 介面
WritableStream 介面用於將流資料寫入接收器。其物件帶有內建的反壓和排隊功能。
建構函式
要建立 WritableStream 物件,WritableStream 介面提供了一個 WritableStream() 建構函式。
語法
const newWrite = new WritableStream(UnderlyingSink) Or const newWrite = new WritableStream(UnderlyingSink, QueuingStrategy)
WritableStream() 建構函式具有以下可選引數 -
UnderlyingSink - 此物件提供各種方法和屬性,這些方法和屬性顯示了寫流例項的行為。它接受四個引數:start(controller)、write(chunk, controller)、close(controller) 和 abort(reason)。
QueuingStrategy - 此物件用於定義寫流的排隊策略。它接受兩個引數:highWaterMark 和 size(chunk)。
例項屬性
WritableStream 介面提供的屬性是隻讀屬性。因此,WritableStream 提供的屬性為 -
| 序號 | 屬性 & 描述 |
|---|---|
| 1 | WritableStream.locked 此屬性用於檢查 WritableStream 是否被鎖定到寫入器。 |
方法
以下是 WritableStream 介面常用的方法 -
| 序號 | 屬性 & 描述 |
|---|---|
| 1 | WritableStream.close() 此方法用於關閉流。 |
| 2 | WritableStream.abort() 此方法用於中止流。 |
| 3 | WritableStream.getWriter() 此方法用於獲取 WriteableStreamDefaultWriter 的新物件,並將流鎖定到該例項。當流被鎖定後,在當前物件被釋放之前,其他任何寫入器都無法獲取。 |
WritableStreamDefaultWriter 介面
WritableStreamDefaultWriter 介面用於表示預設寫入器,該寫入器將資料塊寫入流。
建構函式
要建立 WritableStreamDefaultWriter 物件,WritableStreamDefaultWriter 介面提供了一個 WritableStreamDefaultWriter() 建構函式。
語法
const newWrite = new WritableStreamDefaultWriter(myStream)
此建構函式只包含一個引數 myStream。它將讀取 ReadableStream。
例項屬性
WritableStreamDefaultWriter 介面提供的屬性是隻讀屬性。因此,WritableStreamDefaultWriter 提供的屬性為 -
| 序號 | 屬性 & 描述 |
|---|---|
| 1 | WritableStreamDefaultWriter.closed 此屬性返回一個 Promise,如果流已關閉,則解析,如果由於某些錯誤而被拒絕,則拒絕。它允許您建立一個將在流處理結束時做出響應的程式。 |
| 2 | WritableStreamDefaultWriter.desiredSize 此屬性用於獲取將滿足流內部佇列所需的尺寸。 |
| 3 | WritableStreamDefaultWriter.ready 此屬性返回一個 Promise,當流內部佇列的所需尺寸從負數轉換為正數時,該 Promise 將被解析。 |
方法
以下是 WritableStreamDefaultWriter 介面常用的方法 -
| 序號 | 方法 & 描述 |
|---|---|
| 1 | WritableStreamDefaultWriter.abort() 此方法用於中止流。 |
| 2 | WritableStreamDefaultWriter.close() 此方法用於關閉可寫流。 |
| 3 | WritableStreamDefaultWriter.releaseLock() 此方法用於刪除寫入器在相應流上的鎖定。 |
| 4 | WritableStreamDefaultWriter.write() 此方法用於將傳遞的資料塊寫入 WritableStream 及其底層接收器。它將返回一個 Promise,該 Promise 解析以確定寫入操作是失敗還是成功。 |
WritableStreamDefaultController 介面
WritableStreamDefaultController 介面表示一個控制器,允許我們控制 WritableStream 狀態。它不提供任何控制器,並且在構造 WritableStream 時會自動建立例項。
例項屬性
WritableStreamDefaultController 介面提供的屬性是隻讀屬性。因此,WritableStreamDefaultController 提供的屬性為 -
| 序號 | 屬性 & 描述 |
|---|---|
| 1 | WritableStreamDefaultController.signal 此屬性將返回與指定控制器相關的 AbortSignal。 |
方法
以下是 WritableStreamDefaultController 介面常用的方法 -
| 序號 | 方法 & 描述 |
|---|---|
| 1 | WritableStreamDefaultController.error() 此方法將導致與相關寫流的任何未來互動都發生錯誤。 |
示例 - 建立可寫流
在下面的程式中,我們建立了一個自定義可寫流。因此,要建立可寫流,Stream API 提供了 WritableStream() 建構函式以及 write()、cancel() 和 abort() 函式。write() 函式用於記錄接收到的塊,cancel() 函式用於處理流被取消的情況,abort() 函式用於處理流被中止的情況。現在我們使用 getWriter() 方法建立一個寫入器,以將資料寫入流。因此,寫入器以塊的形式寫入資料,並在完成寫入操作後關閉流。
<!DOCTYPE html>
<html>
<body>
<script>
// Creating a writable stream
const writStream = new WritableStream({
// processing the received chunks
write(chunk) {
console.log('Received chunk:', chunk);
},
// Closing the stream
close(){
console.log('Stream is closed');
},
// Handling the aborting stream
abort(reason){
console.log('Stream is aborted:', reason);
}
});
// Create a writer to write in the stream
const myWriter = writStream.getWriter();
// Writing in the stream
myWriter.write('Orange');
myWriter.write('Blue');
myWriter.write('Pink');
myWriter.write('Red');
// Close the stream
myWriter.close();
</script>
</body>
</html>
輸出
結論
所以這是一個可寫流。藉助可寫流,我們可以輕鬆地將資料寫入資源,而無需將整個資料載入到記憶體中。在下一篇文章中,我們將討論 Stream API 中的變換流。