rxdart с несколькими слушателями, вызывающими многократный запуск обратного вызова сканирования для одного потока - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть запрос о rxdart и, в частности, об ожидаемом поведении здесь.Я подписываюсь с 2 слушателями на Observable.С одним слушателем обратный вызов сканирования запускается один раз.С другим слушателем он запускается дважды.Мне кажется неправильным, что на поведение потока в восходящем направлении может повлиять добавление дополнительного прослушивателя.

Я, вероятно, что-то неправильно использую, и если это так, мне бы хотелось точно знать, что я неправильно понимаю, как это должно работать.

class DataProvider
{
  Subject<Object> input = new PublishSubject<Object>();
  Observable<Object> output;

  DataProvider()
  {
    output =  input.scan((acc, curr, i){
      print("Ran Scan");
      return (acc as int) + curr;
    },0);
  }
}

void main() async {

  var data = DataProvider();

  var f1 = Future.delayed(Duration(seconds: 0),
          () => data.output.listen((value) => print('first: $value')));
  var f2 = Future.delayed(Duration(seconds: 1),
          () => data.output.listen((value) => print('second: $value')));

  print ("-- even increments for single listener");
  await f1;
  print ("-- added 1");
  data.input.add(1);
  print ("-- added 1");
  data.input.add(1);

  await f2;
  print ("-- added 1");
  data.input.add(1);
}

Одним из решений было обертывание вывода в'PublishConnectableObservable' - но мне все равно не имеет смысла, почему оригинал ведет себя так, как он делает.

...