ReadableStream: pipeTo() ã¡ã½ãã
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2022å¹´5æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
pipeTo() 㯠ReadableStream ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ãç¾å¨ã® ReadableStream ãä¸ãããã WritableStream ã«ãã¤ãæ¥ç¶ãã¾ããè¿ããã Promise ã¯ããã¤ãã®ããã»ã¹ãæ£å¸¸ã«å®äºããå ´åã¯å±¥è¡ãããã¨ã©ã¼ãçºçããå ´åã¯æå¦ããã¾ãã
ã¹ããªã¼ã ããã¤ãæ¥ç¶ããã¨ãéå¸¸ãæ¥ç¶ãã¦ããéã¯ã¹ããªã¼ã ãããã¯ãããä»ã®ãªã¼ãã¼ãããã¯ã§ããªããªãã¾ãã
æ§æ
pipeTo(destination)
pipeTo(destination, options)
弿°
destination-
ReadableStreamã®æçµçãªå®å ã¨ãã¦æ©è½ããWritableStreamã optionsçç¥å¯-
writableã¹ããªã¼ã ã«ãã¤ãæ¥ç¶ããã¨ãã«ä½¿ç¨ãããªãã·ã§ã³ã§ãã å©ç¨ã§ãããªãã·ã§ã³ã¯ä»¥ä¸ã®éãã§ããpreventClose-
ããã
trueã«è¨å®ããã¨ãå ¥åå ã®ReadableStreamãéãããã¦ããåºåå ã®WritableStreamãéãããããã¨ã¯ãªããªãã¾ãã ãã®ã¡ã½ããã¯ããã®å¦çãå®å ¨ã«çµäºããã¨å±¥è¡ããããããã¹ãè¿ãã¾ãããã ããåºåå ãéããéã«ã¨ã©ã¼ãçºçããå ´åã¯ããã®ã¨ã©ã¼ã§æå¦ããã¾ãã preventAbort-
ãã®å¤ã
trueã«è¨å®ããã¨ãå ¥åå ã®ReadableStreamã§ã¨ã©ã¼ãçºçãã¦ããåºåå ã®WritableStreamã䏿ããããã¨ããªããªãã¾ãã ãã®ã¡ã½ããã¯ãåºåå ã®ã¨ã©ã¼ãã¾ãã¯åºåå ã䏿¢ããéã«çºçããã¨ã©ã¼ã§æå¦ããããããã¹ãè¿ãã¾ãã preventCancel-
ãã®å¤ã
trueã«è¨å®ããã¨ãåºåå ã®WritableStreamã§ã¨ã©ã¼ãçºçãã¦ããå ¥åå ã®ReadableStreamãåãæ¶ããã¨ãã§ããªããªãã¾ãã ãã®å ´åãã¡ã½ããã¯ãå ¥åå ã®ã¨ã©ã¼ãã¾ãã¯å ¥åå ãåãæ¶ãéã«çºçããã¨ã©ã¼ã§æå¦ããããããã¹ãè¿ãã¾ãã ã¾ããåºåå ã®æ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã ãéãããããéå§ããããããå ´åãå ¥åå ã®èªã¿åãå¯è½ãªã¹ããªã¼ã ã¯åãæ¶ãããªããªãã¾ãã ãã®å ´åãã¡ã½ããã¯ãéããããã¹ããªã¼ã ã¸ã®ãã¤ãå¦çã«å¤±æãããã¨ã示ãã¨ã©ã¼ãã¾ãã¯å ¥åå ãåãæ¶ãéã«çºçããã¨ã©ã¼ã¨ã¨ãã«ãæå¦ããããããã¹ãè¿ãã¾ãã signal-
AbortSignalãªãã¸ã§ã¯ããè¨å®ããã¨ãé²è¡ä¸ã®ãã¤ãæä½ã対å¿ããAbortControllerãã䏿¢ã§ãã¾ãã
è¿å¤
ãã¤ãã®ããã»ã¹ãå®äºããã¨ãã«è§£æ±ºãã Promise ã§ãã
ä¾å¤
TypeError-
writableStreamãreadableStreamãªãã¸ã§ã¯ãã¯ãæ¸ãè¾¼ã¿å¯è½ãªã¹ããªã¼ã /èªã¿åãå¯è½ãªã¹ããªã¼ã ã§ã¯ãªãããã¹ããªã¼ã ã®ä¸æ¹ã¾ãã¯ä¸¡æ¹ãããã¯ããã¦ãã¾ãã
ä¾
// å
ã®ç»åãèªã¿åã
fetch("png-logo.png")
// ãã® body ã ReadableStream ã¨ãã¦åå¾
.then((response) => response.body)
.then((body) => body.pipeThrough(new PNGTransformStream()))
.then((rs) => rs.pipeTo(new FinalDestinationStream()));
åãä¾ã§ await 使ç¨ããã¨æ¬¡ã®ããã«ãªãã¾ãã
(async () => {
// å
ã®ç»åãèªã¿åã
const response = await fetch("png-logo.png");
// ãã® body ã ReadableStream ã¨ãã¦åå¾
response.body
.pipeThrough(new PNGTransformStream())
.pipeTo(new FinalDestinationStream());
})();
仿§æ¸
| 仿§æ¸ |
|---|
| Streams > # ref-for-rs-pipe-to⣠> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
ReadableStream()ã³ã³ã¹ãã©ã¯ã¿ã¼- ãã¤ããã§ã¼ã³