Error when performing flatMap on an EventStream derived from a Future
danschultz opened this issue · comments
Dan Schultz commented
The following code will cause an BadState: Stream is already closed
error:
new EventStream.fromFuture(new Future.value(1))
.flatMap((value) => new Stream.fromIterable([value]))
.listen(print);
This is happening because the controller in _ForwardingReactable
is closed once the source stream is done, but the events from flatMap()
are still adding events to the controller.
Stack trace:
Unhandled exception:
Uncaught Error: Bad state: Stream is already closed
Stack Trace:
#0 _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:65)
#1 _EventSinkWrapper.add (dart:async/stream_transformers.dart:14)
#2 StreamView&&Reactable.flatMap.<anonymous closure>.<anonymous closure> (package:frappe/src/reactable.dart:165:48)
#3 Stream.forEach.<anonymous closure>.<anonymous closure> (dart:async/stream.dart:626)
#4 _runUserCode (dart:async/stream_pipe.dart:12)
#5 Stream.forEach.<anonymous closure> (dart:async/stream.dart:625)
#6 _RootZone.runUnaryGuarded (dart:async/zone.dart:1089)
#7 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341)
#8 _IterablePendingEvents.handleNext (dart:async/stream_impl.dart:549)
#9 _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:671)
#10 _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:41)
#11 _asyncRunCallback (dart:async/schedule_microtask.dart:48)
#12 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:84)
#13 _startIsolate (dart:isolate-patch/isolate_patch.dart:244)
#14 _startMainIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:192)
#15 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:130)