สตรีมแปลงข้อมูล
แก้ไขข้อมูลขณะที่ไหลผ่านกระบวนการต่อเนื่อง
สตรีมแปลงข้อมูล เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
TransformStream คืออะไร
TransformStream อยู่ระหว่างด้านที่อ่านได้และด้านที่เขียนได้ ส่วนข้อมูลที่เขียนเข้ามาจะถูกแปลงและส่งออก ซึ่งเป็นขั้นตอนในสายประมวลผลที่แมป กรอง หรือปรับรูปข้อมูลระหว่างทาง
โครงสร้าง
มีปลายทางสองด้าน ได้แก่ writable (จุดที่ข้อมูลไหลเข้า) และ readable (จุดที่ข้อมูลหลังการแปลงไหลออก)
const ts = new TransformStream();
console.log(ts.writable, ts.readable);เมธอดแปลงข้อมูล
กำหนดการทำงานด้วยฟังก์ชัน transform(chunk, controller) เรียก controller.enqueue() เพื่อส่งผลลัพธ์ออก
const upper = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
}
});ข้อมูลเข้าหนึ่งส่วน ผลลัพธ์ออกได้หลายส่วน
การแปลงหนึ่งครั้งอาจส่งออกศูนย์หนึ่งส่วน หรือหลายส่วนต่อข้อมูลเข้าหนึ่งส่วน เหมาะอย่างยิ่งสำหรับการแยกหรือขยายข้อมูล
const splitter = new TransformStream({
transform(line, controller) {
for (const word of line.split(" ")) controller.enqueue(word);
}
});การกรองด้วยการแปลงข้อมูล
เพียงไม่ส่งส่วนข้อมูลที่คุณต้องการทิ้งเข้าคิว
const onlyEven = new TransformStream({
transform(n, controller) {
if (n % 2 === 0) controller.enqueue(n);
}
});เมธอด flush
flush(controller) จะทำงานหนึ่งครั้งเมื่อข้อมูลเข้าจบลง เหมาะสำหรับส่งข้อมูลที่เหลืออยู่ในบัฟเฟอร์หรือส่วนข้อมูลสุดท้ายออก
const ts = new TransformStream({
transform(c, ctrl) { ctrl.enqueue(c); },
flush(ctrl) { ctrl.enqueue("[END]"); }
});การเก็บข้อมูลข้ามส่วน
เก็บสถานะไว้ในคลอเชอร์เพื่อเชื่อมส่วนข้อมูลที่ไม่สมบูรณ์ เช่น การประกอบบรรทัดที่สมบูรณ์จากขอบเขตไบต์ที่แบ่งแบบไม่แน่นอน
let buffer = "";
new TransformStream({
transform(chunk, ctrl) {
buffer += chunk;
const parts = buffer.split("\n");
buffer = parts.pop();
for (const line of parts) ctrl.enqueue(line);
},
flush(ctrl) { if (buffer) ctrl.enqueue(buffer); }
});สตรีมแปลงข้อมูลในตัว
แพลตฟอร์มมี TextDecoderStream, TextEncoderStream และ CompressionStream/DecompressionStream ซึ่งเป็นตัวแปลงข้อมูลสำเร็จรูป
const gzip = new CompressionStream("gzip");
const compressed = inputStream.pipeThrough(gzip);การเชื่อมต่อด้วย pipeThrough
readable.pipeThrough(transform) จะเชื่อมแหล่งต้นทางเข้ากับตัวแปลง และส่งคืนผลลัพธ์แบบอ่านได้ของตัวแปลง ซึ่งพร้อมสำหรับขั้นตอนถัดไป
const out = sourceStream
.pipeThrough(new TextDecoderStream())
.pipeThrough(upper);การแปลงข้อมูลแบบอะซิงโครนัส
transform อาจทำงานแบบอะซิงโครนัสได้ โดยรอผลภายในเพื่อเรียกใช้ส่วนติดต่อการเขียนโปรแกรมหรือทำงานแบบอะซิงโครนัสกับแต่ละส่วนข้อมูล สตรีมจะรอพรอมิส
new TransformStream({
async transform(chunk, ctrl) {
const result = await process(chunk);
ctrl.enqueue(result);
}
});การส่งต่อข้อผิดพลาด
การโยนข้อผิดพลาดภายใน transform จะทำให้ stream เกิดข้อผิดพลาด ผู้ใช้ปลายทางจะเห็นข้อผิดพลาด และสายประมวลผลจะถูกยกเลิก
new TransformStream({
transform(chunk, ctrl) {
if (!valid(chunk)) throw new Error("bad chunk");
ctrl.enqueue(chunk);
}
});ตรวจสอบความเข้าใจ
ทดสอบสตรีมแปลงข้อมูล
ทบทวน: สตรีมแปลงข้อมูล
คุณสร้างการแปลงข้อมูลด้วย transform และ flush แมป กรอง และขยายชิ้นข้อมูล ทำบัฟเฟอร์ข้ามขอบเขตชิ้นข้อมูล ใช้เครื่องมือในตัวอย่าง CompressionStream และเชื่อมต่อขั้นตอนต่าง ๆ ด้วย pipeThrough ต่อไปคือแรงดันย้อนกลับและการส่งข้อมูลต่อ
คำถามที่พบบ่อย
บทเรียน “สตรีมแปลงข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “สตรีมแปลงข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “สตรีมแปลงข้อมูล”
แก้ไขข้อมูลขณะที่ไหลผ่านกระบวนการต่อเนื่อง คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “สตรีมแปลงข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม
ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ