WritableStreamDefaultWriter: write() ã¡ã½ãã
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2022å¹´5æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
write() 㯠WritableStreamDefaultWriter ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ã渡ããããã¼ã¿ã®ãã£ã³ã¯ã WritableStream ã¨ãã®åºã«ãªãã·ã³ã¯ã«æ¸ãè¾¼ã¿ããã®å¾ãæ¸ãè¾¼ã¿æä½ã®æåã¾ãã¯å¤±æã示ãããã«è§£æ±ºããã Promise ãè¿ãã¾ãã
ãæåãã®æå³ã¯ãåºã«ãªãã·ã³ã¯æ¬¡ç¬¬ã§ãããã¨ã«æ³¨æãã¦ãã ããã åã«ãã£ã³ã¯ãåãå ¥ãããããã¨ã示ãã¦ããã ãã§ãå¿ ãããæçµçãªå®å ã«å®å ¨ã«ä¿åããã¦ããã¨ã¯éãã¾ããã
æ§æ
write(chunk)
弿°
chunk-
WritableStreamã«æ¸¡ããã¤ããªãã¼ã¿ã®ãããã¯ã
è¿å¤
Promise ã§ãã æ¸ãè¾¼ã¿ãæåãã㨠undefined ã§æºããããæ¸ãè¾¼ã¿ããã»ã¹ãéå§ãããåã«æ¸ãè¾¼ã¿ã失æãããã¹ããªã¼ã ãã¨ã©ã¼ã«ãªãã¨æå¦ããã¾ãã
ä¾å¤
TypeError-
対象ã®ã¹ããªã¼ã ã¯æ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ã§ã¯ãªããããªã¼ãã¼ããªãå ´åã
ä¾
次ã®ä¾ã¯ãã«ã¹ã¿ã ã®ã·ã³ã¯ã¨ API æä¾ã®ãã¥ã¼ã¤ã³ã°æ¦ç¥ã使ç¨ãã WritableStream ã®ä½æã示ãã¦ãã¾ãã æ¬¡ã«ãsendMessage() ã¨ãã颿°ãå¼ã³åºããæ°ãã使ãããã¹ããªã¼ã ã¨æååãæ¸¡ãã¾ãã ãã®é¢æ°å
ã§ãWritableStreamDefaultWriter ã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¹ããªã¼ã ã® getWriter() ã¡ã½ãããå¼ã³åºãã¾ãã forEach() å¼ã³åºãã使ç¨ãã¦ãæååã®åãã£ã³ã¯ãã¹ããªã¼ã ã«æ¸ãè¾¼ã¿ã¾ãã æå¾ã«ãwrite() ããã³ close() ã¯ããã£ã³ã¯ã¨ã¹ããªã¼ã ã®æåã¾ãã¯å¤±æã«å¯¾å¦ããããã®ãããã¹ãè¿ãã¾ãã
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(() => 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) => {
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 > # ref-for-default-writer-writeâ â¡ > |