Observable
被觀察對(duì)象
可以用下面方式創(chuàng)建:
Observable<String> _observable = Observable(Stream.fromIterable(['hello','你好']));
Observable<String> _observable = Observable.fromFuture(Future.value('hello'));
Observable<String> _observable = Observable.fromIterable(['hello','你好']);
Observable<String> _observable = Observable.periodic(Duration(seconds: 1), (x)=>x.toString());
用下面方式偵聽(tīng)
_observable.listen((data)=>print('$data obs listener'));
PublishSubject
前置偵聽(tīng), 在add時(shí)結(jié)算
行為 | 結(jié)果 |
---|---|
listen1,add1唱歧, add2 | listen1會(huì)依次執(zhí)行add1芽偏,add2通知 |
listen1位他,add1番刊, add2子房,listen2 | listen1會(huì)依次執(zhí)行add1狭莱,add2通知,listen2什么也不執(zhí)行 |
PublishSubject<String> _subject = PublishSubject<String>();
_subject.listen((data)=>print('$data output1'));
_subject.add('hello');
_subject.listen((data)=>print('$data output2'));
_subject.add('你好');
_subject.close();
偵聽(tīng)
如果偵聽(tīng)添加到add后皆愉,則不會(huì)接受之前任何add事件
不過(guò)嗜价,BehaviorSubject則不需要考慮前后順序
_subject.listen((data)=>print('$data output2'));
添加
_subject.add('你好');
關(guān)閉
_subject.close();
BehaviorSubject
后置監(jiān)聽(tīng),在周期結(jié)束結(jié)算幕庐,并只保留最近一次add事件(簡(jiǎn)單理解久锥,但并不全是)
行為 | 結(jié)果 |
---|---|
listen1,add1异剥, add2 | listen1會(huì)依次執(zhí)行add1瑟由,add2通知 |
listen1,add1冤寿, add2歹苦,listen2 | listen1會(huì)依次執(zhí)行add1,兩個(gè)listener都執(zhí)行add2通知督怜,無(wú)論后面加再多的listener |
ReplaySubject
完全監(jiān)聽(tīng)殴瘦,在周期結(jié)束結(jié)算,并保留所有add發(fā)送給所有偵聽(tīng)者号杠,無(wú)論順序蚪腋。如果maxSize為1,則效果如同BehaviorSubject
行為 | 結(jié)果 |
---|---|
listen1究流,add1辣吃, add2 | listen1會(huì)依次執(zhí)行add1动遭,add2通知 |
listen1芬探,add1, add2厘惦,listen2 | 兩個(gè)listener都執(zhí)行add1偷仿, add2通知,無(wú)論后面加再多的listener |
ReplaySubject<String> _subject = ReplaySubject<String>(maxSize: 2);
_subject.listen((data)=>print('$data output1'));
_subject.add('hello');
_subject.add('你好');
_subject.listen((data)=>print('$data output2'));
_subject.close();