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