Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dart's Async Stream<T> gotchas

Dart's Async Stream<T> gotchas

About Dart's async Stream and syntax sugers, async*, await for...

UEHARA Junji

March 29, 2018
Tweet

More Decks by UEHARA Junji

Other Decks in Technology

Transcript

  1. ؔ਺म০ࢠ ྫ ໊শ ΧδϡΞϧͳઆ໌ म০ͳ͠ T 
 func() {} ؔ਺

    ී௨ͷؔ਺ async Future<T> func() async {} ඇಉظؔ਺ BTZODGVODUJPOT +4$ͷBTZODؔ਺ sync* Iteratable<T> func() sync* {} ಉظδΣωϨʔλ (synchronous generators) JS/PythonͷδΣωϨʔλ async* Stream<T> func() async*{} ඇಉظδΣωϨʔλ
 (asynchronous generators) ???
  2. Stream<T> is Կ? ୯Ұ஋ ෳ਺஋ ಉظ T Iterable<T> ඇಉظ Future<T>

    Stream<T> • ͜͜Ͱͷ”ඇಉظ”͸ʮݱεϨου಺Ͱ͸஋͕औΕͳ͍ʯఔ౓ͷҙ • Streamʹ͸ෳ਺ϦεφΛొ࿥Ͱ͖ΔϒϩʔυΩϟετετϦʔϜ ͱɺҰ͔ͭ͠ొ࿥Ͱ͖ͳ͍୯Ұొ࿥ετϦʔϜ͕͋Δ͕(ܕ͸ಉ ͡)ɺasync*͸୯Ұొ࿥ετϦʔϜΛฦ͢ɻ
  3. म০ͷޮՌ ྫ ؔ਺಺Ͱ࢖͑Δ return await await for yield yield* म০ͳ͠

    T func() {} ✔ × × × × async Future<T> func() async {} ✔ ✔ ✔ × × sync* Iteratable<T> func() sync* {} × × × ✔ ✔ async* Stream<T> func() async*{} × ✔ ✔ ✔ ✔
  4. await forͬͯԿ? ετϦʔϜʹର͢ΔҎԼͷॲཧΛforϧʔϓΆ͘ॻ͘γϯλοΫεγϡ Ψʔ A. ཁૉ਺ճ࣮ߦ͞ΕΔΠϕϯτϋϯυϥઃఆ B. (Ωϟϯηϧ࣌Τϥʔϋϯυϥઃఆ) C. Ұ࿈ͷΠϕϯτϋϯυϥ࣮ߦ͕׬ྃͨ͠ͱ͖ͷඇಉظίʔϧόο

    Ϋઃఆ D. Cʹ͍ͭͯawait ඍົɾෆศ ແݶ௕ετϦʔϜʹద༻͢ΔͱɺC΍Dʹ౸ୡ͠ͳ͍ CͰͷFutureͰൃੜ͢Δඇಉظྫ֎ΛߏจతʹΩϟονͰ͖ͳ͍
  5. await for͸γϯλοΫεγϡΨʔ try { await for (elem in stream) {

    AAA } } catch (e) { BBB } CCC stream.listen((elem) { AAA }, onError: (e) { BBB }, onDone: () { CCC } );