Membuat Stream dengan async*
Menghasilkan event dari generator
Membuat Stream dengan async* adalah pelajaran Dart Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Dart Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Dart Academy mencakup 4 pelajaran total.
Menghasilkan Stream Anda Sendiri
Sejauh ini Anda mengonsumsi stream yang dibuat orang lain. Sekarang Anda akan membuatnya sendiri menggunakan async generator, cara paling rapi untuk memancarkan peristiwa.
Kata Kunci async*
Tandai sebuah fungsi dengan async*, dan fungsi tersebut menjadi generator stream. Jenis pengembaliannya adalah Stream, dan fungsi itu dapat memancarkan nilai seiring waktu. 🚿
Stream<int> countTo(int n) async* {
// body uses yield
}yield Memancarkan Nilai
Di dalam fungsi async*, yield mengirimkan satu nilai ke dalam stream. Eksekusi berhenti di sana sampai pendengar siap menerima nilai berikutnya.
Stream<int> oneTwo() async* {
yield 1;
yield 2;
}yield di dalam Perulangan
Gabungkan yield dengan perulangan untuk memancarkan banyak nilai. Setiap putaran mengirimkan angka berikutnya ke dalam stream secara otomatis.
Stream<int> countTo(int n) async* {
for (var i = 1; i <= n; i++) yield i;
}await di dalam async*
Karena fungsi tersebut bersifat async, Anda dapat menggunakan await di antara yield. Dengan begitu, Anda dapat mengambil data atau menunda eksekusi sebelum memancarkan peristiwa berikutnya.
Stream<int> ticker() async* {
while (true) {
await Future.delayed(Duration(seconds: 1));
yield DateTime.now().second;
}
}yield* Meneruskan Stream
Gunakan yield* untuk memancarkan setiap peristiwa dari stream lain di dalam generator Anda. Ini menyisipkan seluruh stream tersebut ke dalam stream Anda.
Stream<int> combined() async* {
yield* countTo(3);
yield 99;
}Lazy hingga Didengarkan
Fungsi async* tidak mulai berjalan sampai seseorang mendengarkan. Isi fungsi hanya dijalankan saat pendengar meminta setiap nilai. ⏸️
Penundaan Mengikuti Pendengar
Jika pendengar berhenti sementara, generator juga berhenti pada yield berikutnya. Pengendalian arus balik ini mencegah produsen membebani penerima.
Error dari async*
throw di dalam fungsi async* menjadi peristiwa error pada stream. Pendengar dapat menangkapnya seperti error stream lainnya.
Stream<int> risky() async* {
yield 1;
throw 'boom';
}Mengonsumsi Generator Anda
Baca stream yang Anda hasilkan dengan cara biasa menggunakan await for. Setiap nilai yang di-yield mengalir ke dalam perulangan secara berurutan.
await for (final n in countTo(3)) {
print(n);
}async* vs StreamController
Untuk output berurutan berbasis penarikan, async* lebih sederhana daripada StreamController. Gunakan controller hanya jika peristiwa berasal dari callback eksternal.
Pemeriksaan Singkat
Bagaimana cara memancarkan nilai dari fungsi async*?
Ringkasan
Anda membuat stream dengan async*, mengirimkan nilai melalui yield, meneruskan dengan yield*, dan menggunakan await di antara peristiwa. Kini Anda dapat mengonsumsi sekaligus menghasilkan stream. 🎉
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membuat Stream dengan async*” gratis?
Ya — teks lengkap “Membuat Stream dengan async*” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Dart Academy, upgrade ke CoddyKit PRO. Kursus Dart Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membuat Stream dengan async*”?
Menghasilkan event dari generator Kamu berlatih Dart Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Dart Academy?
Tidak diperlukan pengalaman sebelumnya. Dart Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Membuat Stream dengan async*” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Dart Academy ini?
Ya. Setiap pelajaran Dart Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendengarkan dengan await for
- Stream Tunggal vs Broadcast
- Transformasi Stream: map, where, take
- Membuat Stream dengan async*