WritableStream
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2022年5月.
* Some parts of this feature may have varying levels of support.
WritableStream はストリーム API のインターフェイスで、ストリーミングデータをシンクと呼ばれる宛先に書き込むための標準的な抽象化を提供します。 このオブジェクトには、背圧とキューイングが組み込まれています。
WritableStream は移譲可能オブジェクトです。
コンストラクター
WritableStream()-
新しい
WritableStreamオブジェクトを作成します。
インスタンスプロパティ
WritableStream.locked読取専用-
論理値で、
WritableStreamがライターにロックされているかどうかを示します。
インスタンスメソッド
WritableStream.abort()-
ストリームを中止し、プロデューサーがストリームに正常に書き込むことができなくなり、キューに入れられた書き込みが破棄されてすぐにエラー状態に移行することを通知します。
WritableStream.close()-
ストリームを閉じます。
WritableStream.getWriter()-
WritableStreamDefaultWriterの新しいインスタンスを返し、そのインスタンスにストリームをロックします。 ストリームがロックされている間、このライターが開放されるまで他のライターを取得することはできません。
例
次の例は、このインターフェイスのいくつかの機能を示しています。 カスタムのシンクと API 提供のキューイング戦略を使用した WritableStream の作成を示しています。 次に、sendMessage() という関数を呼び出し、新しく作成したストリームと文字列を渡します。 この関数内で、WritableStreamDefaultWriter のインスタンスを返すストリームの getWriter() メソッドを呼び出します。 forEach() 呼び出しを使用して、文字列の各チャンクをストリームに書き込みます。 最後に、write() および close() は、チャンクとストリームの成功または失敗に対処するためのプロミスを返します。
完全なコードは、単純なライターの例にあります。
背圧
背圧が API でどのように対応しているかによるため、コードでの実装はあまり明白ではないかもしれません。 背圧がどのように実装されているかを確認するためには、次の 3 つのことを確認してください。
- カウント戦略の作成時に設定される
highWaterMarkプロパティ(35 行目)は、WritableStreamインスタンスが 1 回のwrite()操作で処理するデータの最大量を設定します。 この例では、defaultWriter.write()に送信できるデータの最大量です(11 行目)。 defaultWriter.readyプロパティは、シンク(WritableStreamコンストラクターの最初のプロパティ)がデータの書き込みを完了すると解決するプロミスを返します。 データソースは、さらにデータを書き込む(11 行目)か、close()(24 行目)を呼び出すことができます。close()の呼び出しが早すぎると、データの書き込みが妨げられる可能性があります。 このため、この例ではdefaultWriter.readyを 2 回呼び出しています(9 行目と 22 行目)。- シンクの
write()メソッドによって返されるPromise(40 行目)は、WritableStreamとそのライターに、いつdefaultWriter.readyを解決するかを伝えます。
仕様書
| Specification |
|---|
| Streams # ws-class |
ブラウザーの互換性
関連情報
- WHATWG Stream Visualiser: 読み取り可能なストリーム、書き込み可能なストリーム、および変換ストリームの基本的な視覚化。