第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 Extension 15
1.5 RxJS是否是函数响应式编程 16
1.6函数响应式编程的优势 17
1.7本章小结 18
第2章 RxJS入门 19
2.1 RxJS的版本和运行环境 19
2.2 Observable和Observer 24
2.2.1观察者模式 24
2.2.2迭代器模式 25
2.2.3创造Observable 26
2.2.4跨越时间的Observable 28
2.2.5永无止境的Observable 29
2.2.6 Observable的完结 30
2.2.7 Observable的出错处理 31
2.2.8 Observer的简单形式 32
2.3退订Observable 33
2.4 Hot Observable和Cold Observable 35
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关联Observable 53
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和throw 78
4.3创建异步数据的Observable对象 80
4.3.1 interval和timer:定时产生数据 80
4.3.2 from:可把一切转化为Observable 82
4.3.3 fromPromise:异步处理的交接 84
4.3.4 fromEvent 85
4.3.5 fromEventPattern 87
4.3.6 ajax 88
4.3.7 repeatWhen 89
4.3.8 defer 91
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 withLatestFrom 109
5.1.6解决glitch 112
5.1.7 race:胜者通吃 115
5.1.8 startWith 115
5.1.9 forkJoin 117
5.2高阶Observable 118
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 every 134
6.2.2 find和findIndex 135
6.2.3 isEmpty 137
6.2.4 defaultIfEmpty 138
6.3本章小结 138
第7章 过滤数据流 139
7.1过滤类操作符的模式 140
7.1.1 filter 141
7.1.2 first 142
7.1.3 last 144
7.1.4 take一族操作符 145
7.1.5计时的点击计数网页程序 150
7.1.6 skip 151
7.1.7 skipWhile和skipUntil 151
7.2回压控制 152
7.2.1 throttle和debounce 154
7.2.2 auditTime和 audit 164
7.2.3 sampleTime和sample 166
7.2.4根据数据序列做回压控制 168
7.3其他过滤方式 171
7.3.1 ignoreElements 172
7.3.2 elementAt 172
7.3.3 single 173
7.4本章小结 173
第8章 转化数据流 174
8.1转化类操作符 174
8.2映射数据 175
8.2.1 map 176
8.2.2 mapTo 177
8.2.3 pluck 178
8.3缓存窗口:无损回压控制 179
8.3.1 windowTime和bufferTime 180
8.3.2 windowCount和bufferCount 183
8.3.3 windowWhen和bufferWhen 184
8.3.4 windowToggle和buffer-Toggle 185
8.3.5 window和buffe 186
8.4高阶的map 188
8.4.1 concatMap 189
8.4.2 mergeMap 192
8.4.3 switchMap 193
8.4.4 exhaustMap 195
8.4.5高阶的MapTo 195
8.4.6 expand 196
8.5数据分组 196
8.6累计数据 200
8.6.1 scan 200
8.6.2 mergeScan 201
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 catch 214
9.3.2 retry 216
9.3.3 retryWhen 217
9.3.4 finally 220
9.4重试的本质 221
9.5本章小结 223
第10章 多播 225
10.1数据流的多播 225
10.2 Hot和Cold数据流差异 228
10.3 Subject 230
10.3.1两面神Subject 230
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 multicast 241
10.4.2 publish 253
10.4.3 share 255
10.5高级多播功能 257
10.5.1 publishLast和Async-Subject 258
10.5.2 pubishReplay和Replay-Subject 259
10.5.3 publishBehavior和BehaviorSubject 262
10.6本章小结 263
第11章 掌握时间的Scheduler 265
11.1 Scheduler的调度作用 265
11.2 RxJS提供的Scheduler 268
11.3 Scheduler的工作原理 269
11.3.1单线程的JavaScript 270
11.3.2调用栈和事件循环 272
11.3.3 Scheduler如何工作 275
11.4支持Scheduler的操作符 279
11.4.1创造类和合并类操作符 279
11.4.2 observeOn 281
11.4.3 subscribeOn 282
11.5本章小结 283
第12章 RxJS的调试和测试 284
12.1调试方法 284
12.1.1无用武之地的Debugger 285
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操纵时间的TestScheduler 306
12.2.6可测试性代码 325
12.3本章小结 340
第13章 用RxJS驱动React 341
13.1 React简介 341
13.1.1为什么选择React 341
13.1.2 React如何工作 343
13.2简单的React应用Counter 350
13.3利用RxJS管理React状态 356
13.3.1利用Subject作为桥梁 356
13.3.2用高阶组件连接RxJS 359
13.4本章小结 365
第14章 Redux和RxJS结合 366
14.1 Redux简介 366
14.1.1 Redux的工作方式 367
14.1.2构建Redux应用 368
14.2用RxJS实现Redux 372
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实现breakout 385
15.4本章小结 397
结语 398