自定义操作符
interface CustomOperatorValue {result: any;isError: boolean;}export type CustomOperatorCalc = (value) => CustomOperatorValue;export const customOperator = (fn: CustomOperatorCalc) => source => {return new Observable(observer => {source.subscribe(value => {if (!fn(value).isError) {observer.next(fn(value).result);} else {observer.error(fn(value).result);}},err => {observer.error(err);},_ => {observer.complete();});});};
export const responseBodyOperator = <T>(safeResult: T) => {return customOperator((response: Response<any>) => {const standardResponse = getSuccessResponse(response.body);if (standardResponse.successful()) {return {isError: false,result: standardResponse.body()};} else {return {isError: true,result: safeResult};}});};
paiewise
Concat,merge, mergMap
CombineLatest
应用:表单校验
应用:ng-zorro练习:ng-today的todoComponent
reduce
pluck
- 提取对象属性
- 提取嵌套的属性
e.touches[0].pageX就可以用pluck(‘touches’, ‘0’, ‘pageX’)
combineLatest zip withLatestFrom
zip
zip结合interval可以实现截个
var main = Rx.Observable.from('hello').zip(Rx.Observable.interval(500), (x, y) => x);var some = Rx.Observable.from([0,1,0,0,0,1]).zip(Rx.Observable.interval(300), (x, y) => x);
withLatestFrom 主从关系
withLatestFrom 很常用在一些 checkbox 型的功能,例如说一个编辑器,我们开启粗体后,打出来的字就都要变粗体,粗体就像是 some observable,而我们打字就是 main observable。
