Baseline Widely available
WritableStream()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãæ°ãã WritableStream
ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ã使ãã¾ãã
new WritableStream(underlyingSink)
new WritableStream(underlyingSink, queuingStrategy)
弿°
underlyingSink
çç¥å¯
æ§ç¯ãããã¹ããªã¼ã ã®ã¤ã³ã¹ã¿ã³ã¹ã®æ¯ãèããå®ç¾©ããã¡ã½ããã¨ããããã£ãå«ããªãã¸ã§ã¯ãã underlyingSink
ã«ã¯ä»¥ä¸ãå«ãããã¨ãã§ãã¾ãããã®ã¡ã½ããã«æ¸¡ããã controller
弿°ã¯ WritableStreamDefaultController
ã§ãããããã使ç¨ãã¦ä¸æ¢ãã¨ã©ã¼ã®éç¥ãè¡ããã¨ãã§ãã¾ãã
start(controller)
çç¥å¯
ããã¯ããªãã¸ã§ã¯ããæ§ç¯ãããã¨ãã«ããã«å¼ã³åºãããã¡ã½ããã§ãããã®ã¡ã½ããã®ä¸èº«ã¯éçºè ãå®ç¾©ããåºç¤ã¨ãªãã·ã³ã¯ã«ã¢ã¯ã»ã¹ãããã¨ãç®çã¨ããå¿ è¦ãããã¾ãããã®å¦çãéåæã§è¡ãããå ´åã¯ãæåã失æãã示ããããã¹ãè¿ããã¨ãã§ãã¾ãã
write(chunk, controller)
çç¥å¯
ãã®ã¡ã½ãããéçºè
ã«ãã£ã¦å®ç¾©ãããæ°ãããã¼ã¿ãã£ã³ã¯ ï¼chunk
弿°ã§æå®ããããã®ï¼ãåºåºã®ã·ã³ã¯ã«æ¸ãè¾¼ããç¶æ
ã«ãªã£ãã¨ãã«å¼ã³åºããã¾ãããã®ã¡ã½ããã¯ãæ¸ãè¾¼ã¿å¦çã®æåã¾ãã¯å¤±æã示ããããã¹ãè¿ããã¨ãã§ãã¾ãããã®ã¡ã½ããã¯ååã®æ¸ãè¾¼ã¿ãæåããå¾ã«ã®ã¿å¼ã³åºãããã¹ããªã¼ã ãéããããã䏿ããããããå¾ã«ã¯å¼ã³åºããã¾ããï¼ä¸è¨åç
§ï¼ã
close(controller)
çç¥å¯
ãã®ã¡ã½ãããéçºè ã«ãã£ã¦å®ç¾©ãããã¢ããªãã¹ããªã¼ã ã¸ã®ãã£ã³ã¯ã®æ¸ãè¾¼ã¿ãå®äºãããã¨ãéç¥ããã¨å¼ã³åºããã¾ããä¸èº«ã¯ãåºç¤ã¨ãªãã·ã³ã¯ã¸ã®æ¸ãè¾¼ã¿ã確å®ããããã¸ã®ã¢ã¯ã»ã¹ãè§£æ¾ããããã«å¿ è¦ãªãã¨ãä½ã§ãè¡ãå¿ è¦ãããã¾ãã ãã®å¦çãéåæã§ããå ´åãæåã¾ãã¯å¤±æã示ããããã¹ãè¿ããã¨ãã§ãã¾ãããã®ã¡ã½ããã¯ããã¥ã¼ã«å ¥ãããããã¹ã¦ã®æ¸ãè¾¼ã¿ãæåããå¾ã«ã®ã¿å¼ã³åºããã¾ãã
abort(reason)
çç¥å¯
ãã®ã¡ã½ãããéçºè
ã«ãã£ã¦å®ç¾©ãããã¢ããªãçªç¶ã¹ããªã¼ã ãéãã¦ã¨ã©ã¼ç¶æ
ã«ããããã¨ãåå³ããã¨ãã«å¼ã³åºããã¾ãããã㯠close()
ã®ããã«ä¿æããããªã½ã¼ã¹ãæ´çãããã¨ãã§ãã¾ãããæ¸ãè¾¼ã¿ããã¥ã¼ã¤ã³ã°ããã¦ããå ´åã§ã abort()
ãå¼ã³åºããã¾ã - ãããã®ãã£ã³ã¯ã¯ç ´æ£ããã¾ãããã®å¦çãéåæã®å ´åãæåã失æã®ã·ã°ãã«ã®ããã«ãããã¹ãè¿ããã¨ãã§ãã¾ãã reason
弿°ã«ã¯ãã¹ããªã¼ã ã䏿ãããçç±ãè¨è¿°ããæååãæå®ãã¾ãã
queuingStrategy
çç¥å¯
ãªãã·ã§ã³ã§ã¹ããªã¼ã ã®ãã¥ã¼ã¤ã³ã°æ¦ç¥ãå®ç¾©ãããªãã¸ã§ã¯ãã ããã«ã¯æ¬¡ã® 2 ã¤ã®å¼æ°ãå¿ è¦ã§ãã
highWaterMark
è² ã§ãªãæ´æ°ã§ããããã¯ãèå§ãé©ç¨ãããåã«å é¨ãã¥ã¼ã«å«ãããã¨ãã§ãããã£ã³ã¯ã®ç·æ°ãå®ç¾©ãã¾ãã
size(chunk)
chunk
弿°ãå«ãã¡ã½ããã§ããããã¯ãåãã£ã³ã¯ã«ä½¿ç¨ãããµã¤ãºããã¤ãåä½ã§ç¤ºãã¾ãã
ã¡ã¢: ç¬èªã®ã«ã¹ã¿ã queuingStrategy
ãå®ç¾©ãããããã®ãªãã¸ã§ã¯ãå¤ã« ByteLengthQueuingStrategy
ã¾ã㯠CountQueuingStrategy
ã®ã¤ã³ã¹ã¿ã³ã¹ã使ç¨ã§ãã¾ãã queuingStrategy
ãæå®ããã¦ããªãå ´åã使ç¨ãããããã©ã«ãã¯ãæé«æ°´æºç¹ã 1 ã® CountQueuingStrategy
ã¨åãã§ãã
WritableStream
ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ã
次ã®ä¾ã¯ããã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ããã¤ãã®æ©è½ã示ãã¦ãã¾ãã ã«ã¹ã¿ã ã®ã·ã³ã¯ã¨ 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);
å®å ¨ãªã³ã¼ãã¯ãåç´ãªã©ã¤ã¿ã¼ã®ä¾ã«ããã¾ãã
èå§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
ã解決ããããä¼ãã¾ããRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4