ReactiveX / rxdart

The Reactive Extensions for Dart

Home Page:http://reactivex.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`PublishSubject` doesn't work with `concatWith` operator

haashem opened this issue · comments

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.

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