目錄 Contents
前言
第1章 函數響應式編程1
1.1 一個簡單的RxJS例子1
1.2 函數式編程5
1.2.1 什麼是函數式編程5
1.2.2 為什麼函數式編程最近纔崛起11
1.2.3 函數式編程和麵嚮對象編程的比較13
1.3 響應式編程14
1.4 Reactive Extension15
1.5 RxJS是否是函數響應式編程16
1.6 函數響應式編程的優勢17
1.7 本章小結18
第2章 RxJS入門19
2.1 RxJS的版本和運行環境19
2.2 Observable和Observer24
2.2.1 觀察者模式24
2.2.2 迭代器模式25
2.2.3 創造Observable26
2.2.4 跨越時間的Observable28
2.2.5 永無止境的Observable29
2.2.6 Observable的完結30
2.2.7 Observable的齣錯處理31
2.2.8 Observer的簡單形式32
2.3 退訂Observable33
2.4 Hot Observable和Cold Observable35
2.5 操作符簡介37
2.6 彈珠圖39
2.7 本章小結41
第3章 操作符基礎42
3.1 為什麼要有操作符42
3.2 操作符的分類44
3.2.1 功能分類45
3.2.2 靜態和實例分類46
3.3 如何實現操作符49
3.3.1 操作符函數的實現49
3.3.2 關聯Observable53
3.3.3 改進的操作符定義55
3.3.4 lettable/pipeable 操作符60
3.4 本章小結68
第4章 創建數據流69
4.1 創建類操作符70
4.2 創建同步數據流70
4.2.1 create:毫無神奇之處71
4.2.2 of:列舉數據71
4.2.3 range:指定範圍73
4.2.4 generate:循環創建74
4.2.5 repeat:重復數據的數據流75
4.2.6 三個極簡的操作符:empty、never和throw78
4.3 創建異步數據的Observable對象80
4.3.1 interval和timer:定時産生數據80
4.3.2 from:可把一切轉化為Observable82
4.3.3 fromPromise:異步處理的交接84
4.3.4 fromEvent85
4.3.5 fromEventPattern87
4.3.6 ajax88
4.3.7 repeatWhen89
4.3.8 defer91
4.4 本章小結92
第5章 閤並數據流93
5.1 閤並類操作符94
5.1.1 concat:首尾相連94
5.1.2 merge:先到先得快速通過96
5.1.3 zip:拉鏈式組閤99
5.1.4 combineLatest:閤並最後一個數據102
5.1.5 withLatestFrom109
5.1.6 解決glitch112
5.1.7 race:勝者通吃115
5.1.8 startWith115
5.1.9 forkJoin117
5.2 高階Observable118
5.2.1 高階Observable的意義119
5.2.2 操作高階Observable的閤並類操作符120
5.2.3 進化的高階Observable處理124
5.3 本章小結128
第6章 輔助類操作符129
6.1 數學類操作符129
6.1.1 count:統計數據個數130
6.1.2 max和min:最大最小值130
6.1.3 reduce:規約統計131
6.2 條件布爾類操作符133
6.2.1 every134
6.2.2 find和findIndex135
6.2.3 isEmpty137
6.2.4 defaultIfEmpty138
6.3 本章小結138
第7章 過濾數據流139
7.1 過濾類操作符的模式140
7.1.1 filter141
7.1.2 first142
7.1.3 last144
7.1.4 take一族操作符145
7.1.5 計時的點擊計數網頁程序150
7.1.6 skip151
7.1.7 skipWhile和skipUntil151
7.2 迴壓控製152
7.2.1 throttle和debounce154
7.2.2 auditTime和audit164
7.2.3 sampleTime和sample166
7.2.4 根據數據序列做迴壓控製168
7.3 其他過濾方式171
7.3.1 ignoreElements172
7.3.2 elementAt172
7.3.3 single173
7.4 本章小結173
第8章 轉化數據流174
8.1 轉化類操作符174
8.2 映射數據175
8.2.1 map176
8.2.2 mapTo177
8.2.3 pluck178
8.3 緩存窗口:無損迴壓控製179
8.3.1 windowTime和bufferTime180
8.3.2 windowCount和bufferCount183
8.3.3 windowWhen和bufferWhen184
8.3.4 windowToggle和buffer-Toggle185
8.3.5 window和buffer186
8.4 高階的map188
8.4.1 concatMap189
8.4.2 mergeMap192
8.4.3 switchMap193
8.4.4 exhaustMap195
8.4.5 高階的MapTo195
8.4.6 expand196
8.5 數據分組196
8.6 纍計數據200
8.6.1 scan200
8.6.2 mergeScan201
8.7 本章小結203
第9章 異常錯誤處理204
9.1 異常處理不可避免204
9.2 異常處理的難點206
9.2.1 try/catch隻支持同步運算207
9.2.2 迴調函數的局限207
9.2.3 Promise的異常處理209
9.3 RxJS的異常處理212
9.3.1 catch214
9.3.2 retry216
9.3.3 retryWhen217
9.3.4 finally220
9.4 重試的本質221
9.5 本章小結223
第10章 多播225
10.1 數據流的多播225
10.2 Hot和Cold數據流差異228
10.3 Subject230
10.3.1 兩麵神Subject230
10.3.2 用Subject實現多播233
10.3.3 makeHot 操作符234
10.3.4 Subject不能重復使用235
10.3.5 Subject可以有多個上遊237
10.3.6 Subject的錯誤處理239
10.4 支持多播的操作符241
10.4.1 multicast241
10.4.2 publish253
10.4.3 share255
10.5 高級多播功能257
10.5.1 publishLast和Async-Subject258
10.5.2 pubishReplay和Replay-Subject259
10.5.3 publishBehavior和BehaviorSubject262
10.6 本章小結263
第11章 掌握時間的Scheduler265
11.1 Scheduler的調度作用265
11.2 RxJS提供的Scheduler268
11.3 Scheduler的工作原理269
11.3.1 單綫程的JavaScript270
11.3.2 調用棧和事件循環272
11.3.3 Scheduler如何工作275
11.4 支持Scheduler的操作符279
11.4.1 創造類和閤並類操作符279
11.4.2 observeOn281
11.4.3 subscribeOn282
11.5 本章小結283
第12章 RxJS的調試和測試284
12.1 調試方法284
12.1.1 無用武之地的Debugger285
12.1.2 利用日誌來調試286
12.1.3 利用do來插入調試代碼287
12.1.4 改進的日誌調試方法290
12.1.5 數據流依賴圖291
12.1.6 彈珠圖292
12.2 單元測試293
12.2.1 單元測試的作用294
12.2.2 RxJS天生適閤單元測試297
12.2.3 單元測試的結構298
12.2.4 RxJS單元測試中的時間303
12.2.5 操縱時間的TestScheduler306
12.2.6 可測試性代碼325
12.3 本章小結340
第13章 用RxJS驅動React341
13.1 React簡介341
13.1.1 為什麼選擇React341
13.1.2 React如何工作343
13.2 簡單的React應用Counter350
13.3 利用RxJS管理React狀態356
13.3.1 利用Subject作為橋梁356
13.3.2 用高階組件連接RxJS359
13.4 本章小結365
第14章 Redux和RxJS結閤366
14.1 Redux簡介366
14.1.1 Redux的工作方式367
14.1.2 構建Redux應用368
14.2 用RxJS實現Redux372
14.3 Redux和RxJS比較374
14.4 Redux-Observable:Redux和RxJS的結閤375
14.5 本章小結380
第15章 RxJS遊戲開發381
15.1 breakout的曆史381
15.2 程序設計383
15.3 用RxJS實現breakout385
15.4 本章小結397
結語398
· · · · · · (
收起)