自定义操作符

RXJS自定义操作符

  1. interface CustomOperatorValue {
  2. result: any;
  3. isError: boolean;
  4. }
  5. export type CustomOperatorCalc = (value) => CustomOperatorValue;
  6. export const customOperator = (fn: CustomOperatorCalc) => source => {
  7. return new Observable(observer => {
  8. source.subscribe(
  9. value => {
  10. if (!fn(value).isError) {
  11. observer.next(fn(value).result);
  12. } else {
  13. observer.error(fn(value).result);
  14. }
  15. },
  16. err => {
  17. observer.error(err);
  18. },
  19. _ => {
  20. observer.complete();
  21. }
  22. );
  23. });
  24. };
  1. export const responseBodyOperator = <T>(safeResult: T) => {
  2. return customOperator((response: Response<any>) => {
  3. const standardResponse = getSuccessResponse(response.body);
  4. if (standardResponse.successful()) {
  5. return {
  6. isError: false,
  7. result: standardResponse.body()
  8. };
  9. } else {
  10. return {
  11. isError: true,
  12. result: safeResult
  13. };
  14. }
  15. });
  16. };

paiewise

前一个路由
应用:PIM商品列表

Concat,merge, mergMap

Concat VS Merge operator

CombineLatest

应用:表单校验
应用:ng-zorro练习:ng-today的todoComponent

reduce

pluck

  • 提取对象属性
  • 提取嵌套的属性

e.touches[0].pageX就可以用pluck(‘touches’, ‘0’, ‘pageX’)

combineLatest zip withLatestFrom

zip

zip结合interval可以实现截个

  1. var main = Rx.Observable.from('hello').zip(Rx.Observable.interval(500), (x, y) => x);
  2. 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。

share, shareReplay

共享源 observable 并重放指定次数的发出