From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../ja/web/api/writablestream/getwriter/index.html | 132 +++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 files/ja/web/api/writablestream/getwriter/index.html (limited to 'files/ja/web/api/writablestream/getwriter/index.html') diff --git a/files/ja/web/api/writablestream/getwriter/index.html b/files/ja/web/api/writablestream/getwriter/index.html new file mode 100644 index 0000000000..5199e752d4 --- /dev/null +++ b/files/ja/web/api/writablestream/getwriter/index.html @@ -0,0 +1,132 @@ +--- +title: WritableStream.getWriter() +slug: Web/API/WritableStream/getWriter +tags: + - API + - Experimental + - Method + - Reference + - Streams + - WritableStream + - getWriter +translation_of: Web/API/WritableStream/getWriter +--- +
{{draft}}{{SeeCompatTable}}{{APIRef("Streams")}}
+ +

{{domxref("WritableStream")}} インターフェイスの getWriter() メソッドは、{{domxref("WritableStreamDefaultWriter")}} の新しいインスタンスを返し、そのインスタンスにストリームをロックします。 ストリームがロックされている間、このライターが開放されるまで他のライターを取得することはできません。

+ +

構文

+ +
var writer = writableStream.getWriter();
+ +

パラメーター

+ +

なし。

+ +

戻り値

+ +

{{domxref("WritableStreamDefaultWriter")}} オブジェクトのインスタンス。

+ +

例外

+ +
+
TypeError
+
ライターを作成しようとしているストリームは {{domxref("WritableStream")}} ではありません。
+
+ +

+ +

次の例は、このインターフェイスのいくつかの機能を示しています。 カスタムのシンクと API 提供のキューイング戦略を使用した WritableStream の作成を示しています。 次に、sendMessage() という関数を呼び出し、新しく作成したストリームと文字列を渡します。 この関数内で、{{domxref("WritableStreamDefaultWriter")}} のインスタンスを返すストリームの getWriter() メソッドを呼び出します。 forEach() 呼び出しを使用して、文字列の各チャンクをストリームに書き込みます。 最後に、write() および close() は、チャンクとストリームの成功または失敗に対処するための promise を返します。

+ + + +
const list = document.querySelector('ul');
+
+function sendMessage(message, writableStream) {
+  // defaultWriter は WritableStreamDefaultWriter 型です
+  const defaultWriter = writableStream.getWriter();
+  const encoder = new TextEncoder();
+  const encoded = encoder.encode(message, { stream: true });
+  encoded.forEach((chunk) => {
+    defaultWriter.ready
+      .then(() => {
+        return defaultWriter.write(chunk);
+      })
+      .then(() => {
+        console.log("Chunk written to sink.");
+      })
+      .catch((err) => {
+        console.log("Chunk error:", err);
+      });
+  });
+  // ライターを閉じる前にすべてのチャンクが
+  // 確実に書き込まれるように、ready を再度呼び出します。
+  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({
+  // シンクの実装
+  write(chunk) {
+    return new Promise((resolve, reject) => {
+      var buffer = new ArrayBuffer(2);
+      var view = new Uint16Array(buffer);
+      view[0] = chunk;
+      var decoded = decoder.decode(view, { stream: true });
+      var listItem = document.createElement('li');
+      listItem.textContent = "Chunk decoded: " + decoded;
+      list.appendChild(listItem);
+      result += decoded;
+      resolve();
+    });
+  },
+  close() {
+    var listItem = document.createElement('li');
+    listItem.textContent = "[MESSAGE RECEIVED] " + result;
+    list.appendChild(listItem);
+  },
+  abort(err) {
+    console.log("Sink error:", err);
+  }
+}, queuingStrategy);
+
+sendMessage("Hello, world.", writableStream);
+ +

完全なコードは、単純なライターの例にあります。

+ +

仕様

+ + + + + + + + + + + + + + +
仕様状態コメント
{{SpecName("Streams","#ws-get-writer","getWriter()")}}{{Spec2('Streams')}}初期定義
+ +

ブラウザーの互換性

+ + + +

{{Compat("api.WritableStream.getWriter")}}

-- cgit v1.2.3-54-g00ecf