danschultz / frappe

A Dart package for functional reactive programming

Home Page:http://pub.dartlang.org/packages/frappe

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Error when performing flatMap on an EventStream derived from a Future

danschultz opened this issue · comments

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)