0Pricing
JavaScript Academy · บทเรียน

สตรีมแปลงข้อมูล

แก้ไขข้อมูลขณะที่ไหลผ่านกระบวนการต่อเนื่อง

สตรีมแปลงข้อมูล เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สตรีมที่อ่านได้
  2. การตอบกลับแบบสตรีมจาก fetch
  3. สตรีมแปลงข้อมูล
  4. แรงดันย้อนกลับและการส่งต่อสตรีม
← กลับไปที่ JavaScript Academy