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

รับฟังด้วย await for

อ่านเหตุการณ์เมื่อมาถึง

รับฟังด้วย await for เป็นบทเรียน Dart Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Dart Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน

Stream คืออะไร

Stream คือลำดับของค่าที่ทยอยมาถึงตามเวลา ไม่ได้มาพร้อมกันทั้งหมด ลองนึกภาพว่าเป็น Future ที่ส่งมอบผลลัพธ์ได้หลายค่าแทนที่จะเป็นเพียงค่าเดียว

สตรีมเทียบกับฟิวเจอร์

ฟิวเจอร์จะให้ค่าหนึ่งค่าในภายหลัง ส่วน สตรีม จะส่งชุดเหตุการณ์ทั้งหมดมาให้ทีละรายการ จนกว่าจะบอกว่าส่งเสร็จแล้ว 🌊

ทำความรู้จักกับ await for

ลูป await for จะอ่านเหตุการณ์จากสตรีมเมื่อเหตุการณ์มาถึง แต่ละรอบของลูปจะได้รับค่าถัดไปที่สตรีมส่งออกมา

await for (final value in stream) {
  print(value);
}

ต้องอยู่ภายใน async

เนื่องจาก await for จะหยุดรอเหตุการณ์ จึงทำงานได้เฉพาะภายในฟังก์ชันที่ระบุด้วย async เท่านั้น ฟังก์ชันจะหยุดพักจนกว่าค่าถัดไปจะพร้อม

Future<void> show(Stream<int> s) async {
  await for (final n in s) print(n);
}

สตรีมสำหรับรับฟัง

คุณสามารถสร้างสตรีมอย่างรวดเร็วด้วย Stream.fromIterable สตรีมจะส่งสมาชิกแต่ละตัวในรายการตามลำดับ จึงเหมาะสำหรับทดลองใช้ await for

final stream = Stream.fromIterable([1, 2, 3]);

วนซ้ำตามเหตุการณ์

จับคู่สตรีมนั้นกับ await for แล้วลูปของคุณจะทำงานหนึ่งครั้งต่อค่าที่ส่งออกมาแต่ละค่า ในตัวอย่างนี้จะแสดง 1 แล้ว 2 แล้วจึง 3

await for (final n in Stream.fromIterable([1, 2, 3])) {
  print(n);
}

รอระหว่างเหตุการณ์

สตรีมจริงมักหยุดพักระหว่างเหตุการณ์ เมื่อใช้ await for โค้ดของคุณจะรอในช่วงเว้นว่างและทำงานต่อทันทีที่ค่าถัดไปมาถึง ⏳

final ticks = Stream.periodic(
    Duration(seconds: 1), (i) => i);

ลูปจบลงเองตามธรรมชาติ

เมื่อสตรีมส่งเหตุการณ์เสร็จแล้ว สตรีมจะส่งสัญญาณ done ลูป await for จะออกจากลูปเอง และฟังก์ชันจะทำงานต่อจากจุดนั้น

await for (final n in finiteStream) print(n);
print('Stream finished');

ข้อผิดพลาดส่งมาถึงลูป

หากสตรีมส่ง ข้อผิดพลาด ข้อผิดพลาดนั้นจะถูกโยนออกมาตรงบรรทัด await for คุณสามารถครอบลูปด้วย try/catch เพื่อจัดการข้อผิดพลาดอย่างเหมาะสมได้

try {
  await for (final n in maybeFails) print(n);
} catch (e) {
  print('Caught: $e');
}

break ยกเลิกการรับฟัง

การใช้ break ภายใน await for จะหยุดลูปและยกเลิกการสมัครรับสตรีมอย่างเงียบ ๆ คุณจะไม่ได้รับเหตุการณ์ที่เหลือจากสตรีมนั้นอีก

await for (final n in stream) {
  if (n > 100) break;
}

ผู้รับฟังได้ครั้งละหนึ่งราย

ลูป await for จะสมัครรับสตรีมแบบสมัครรับครั้งเดียว สตรีมประเภทนี้อ่านได้เพียงครั้งเดียว ดังนั้นการวนลูปครั้งที่สองจะทำให้เกิดข้อผิดพลาด

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับ await for

ทบทวน

คุณได้เรียนรู้ว่าสตรีมส่งค่าจำนวนมากออกมาตลอดเวลา และ await for จะอ่านค่าเหล่านั้นทีละค่าภายในฟังก์ชัน async จนกว่าจะเสร็จสิ้น ทำได้ดีมาก! 🎉

คำถามที่พบบ่อย

บทเรียน “รับฟังด้วย await for” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “รับฟังด้วย await for” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “รับฟังด้วย await for”

อ่านเหตุการณ์เมื่อมาถึง คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “รับฟังด้วย await for” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม

ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. รับฟังด้วย await for
  2. สตรีมแบบเดี่ยวกับแบบกระจายเสียง
  3. แปลงสตรีม: map, where และ take
  4. สร้างสตรีมด้วย async*
← กลับไปที่ Dart Academy