`PublishSubject` doesn't work with `concatWith` operator
haashem opened this issue · comments
Hashem commented
In the below example, concatWith
should emits the values added by stream 2:
void exampleOf(String of, {required void Function() action}) {
print('\n———Example $of———');
action();
}
exampleOf('concatWith(Iterable<Stream>)', action: () {
final stream1 = Stream.fromIterable([2, 3, 4]);
final stream2 = PublishSubject<int>();
stream1.concatWith([stream2]).listen(
(event) => print('append: $event'),
onDone: () => print('Done'),
);
stream2.add(5);
stream2.close();
});
Expected:
———Example concatWith(Iterable<Stream>)———
append: 2
append: 3
append: 4
append: 5
Done
Actual:
———Example concatWith(Iterable<Stream>)———
append: 2
append: 3
append: 4
Done
But if I replace PublishSubject
with BehaviorSubject
it works as expected.
I think it's a bug.
Petrus Nguyễn Thái Học commented
all elements from stream1 will be delivered to the result stream with microtask delays (async by default).
At this time, adding value to PublishSubject is ignored, because the stream1 is listening.
stream1: --2--3--4--|
stream2: 5
result : --2--3--4--|
Sent from my 2201117TG using FastHub
Petrus Nguyễn Thái Học commented
See https://github.com/ReactiveX/rxdart?tab=readme-ov-file#rx-observables-vs-dart-streams, and https://api.flutter.dev/flutter/dart-async/Stream-class.html for more details
A source of asynchronous data events.