流程
创建一个观察者new Observable,使用订阅 subscribe触发事件。
Observable
Observable 中包含 next、error、complete三个函数。next函数发出下一个通知提供行为;error函数,报错信息;complete函数,完成订阅。
Hot 、Cold
- Hot Observale:(例如: DOM事件、State、Subjects多播)
每次订阅都会返回相同值、不会影响主要逻辑行为 - Cold Observable:(例如: HTTP调用、timer延迟、interval间隔)
每个订阅的所有值都是独立生成的。可观察。
创建函数
- of:创建一个Observable,发出一个集合
- from:将参数值转换成Observable。
例如:from([A,B,C])、from(Promise) - fromEvent:创建一个事件Observable。
例如:fromEvent(Button,‘click’) - timer: 延迟,与setTimeout差不多。
例如: timer(1000) - interval:间隔,与setInterval差不多。
例如: interval(1000) - forkJoin: 等所有的Observable响应,才发出响应,与promise中all用法差不多。
例如: forkJoin([A,B]) - combineLatest: 合并Observable响应,特点是每次取最新值得区域。
例如:combineLatest([A,B])
管道
- pipe: 管道,包含多个操作函数。
例如:pipe(filter(val=>val > 0),
map(val=> val * 2),...)
操作符函数
- filter: 过滤器。
例如: filter(val=>val > 0) - map: 遍历,可用于将值转换成其他值。
例如:map(val=>val.name) - tap: 打印
例如:tap(val=>log(val)) - debounceTime: 防抖。
例如:debounnceTime(1000) - catchError: 错误捕获。
例如:catchError(error=>of('error'))
展开操作函数
(报错时,主订阅将会终止。(可用catchError、Empty避免)
- concatMap:等待上一个订阅结束,才执行下一个订阅。
确保一个接一个处理。
例如:concatMap(val=> of()) - switchMpa: 每次获取最新得订阅。
- mergaMap: 合并,多个订阅合并成单个订阅输出。
多播通知
相当于全局变量
- subject:订阅同一个值。
例如:new Subject() - behaviorSubject: 可设置默认值。
例如:new BehaviorSubject(false)