Reactive Programming with RxJS
- Rx.Observable.create(function(observer) { onNext/onCompleted ... }).subscribe(...)
- subscribe用于给Observable指定Observer
- Rx.DOM.get('/api/contents.json').subscribe(...
- Rx.DOM.get('/products').retry(5) //这个算子挺高级的
- Rx.DOM.jsonpRequest({url:..., jsonpCallback:...})
- Rx.DOM.fromWebSocket('ws://127.0.0.1:8080'); //这个有点意思,实时的事件流处理
- Rx.Observable.fromEvent(ws, 'message')... //WebScoket支持多工传输?
- Rx.Observable.from(['Adrià', 'Jen', 'Sergi'])... //从数组
- .fromEvent(document, 'mousemove') //特定元素的特定事件(内部使用了JS bind?)
- debounce(300) //至多300ms触发一次
- .fromPromise
- .fromEvent(document, 'mousemove') //特定元素的特定事件(内部使用了JS bind?)
- Rx.Observable.interval(200).map(...) //算子
- filter
- reduce
- scan
- flatMap(这让我想起了JS Promise中的race API)
- distinct(过滤重复的) / distinctUntilChanged(p 80)
- merge
- pluck(取出指定属性)
- Subject:既是Observable又是Observer(实际上可以看作一种内存缓冲对象)
- AsyncSubject(缓存单个的Ajax请求结果?)
- BehaviorSubject //When an Observer subscribes to a BehaviorSubject , it receives the last emitted value and then all the subsequent values.
- ReplaySubject //缓存全部?
- combineLatest:当一组Observable中任意一个有更新则触发onNext
- 似乎可以认为是全局状态组的任意一个更新?游戏的状态机gameLoop?(所谓的Rx没有全局状态纯属胡说八道)
- p75 We can turn a cold Observable into a hot one using publish.
- p77 使用fragment提纲DOM树更新性能
- p81 每个地点标注就是一个单独的Layer
- p87 这里使用的是String.replace,没有用到JS Template高级特性
- Schedulers
- Rx.Scheduler.default/currentThread/immediate/requestAnimationFrame
- observeOn and subscribeOn //灵活性?
- TestScheduler:createCold/HotObservable ?
- Cycle.js(实现了React的全部功能吗?)
- p108 每个使用JSX的js文件顶端:/** @jsx hJSX */ var hJSX = CycleDOM.hJSX; //?
- Model-View-Intent
Rx让我想起了Java 8 Stream,而Scheduler让我想起了微软的WF库