rxdart具有多个侦听器,导致扫描回调针对单个流多次运行

时间:2019-02-01 18:38:02

标签: dart flutter reactivex rxdart

我有一个关于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”中-但是对于我来说,为什么原始的行为方式仍然没有道理。

0 个答案:

没有答案