首页 > 解决方案 > 订阅中的订阅更好地使用 switchMap 以 angular2+ 编写

问题描述

有人可以帮我更好地编写这段代码。我似乎无法理解 switchMap、mergeMap 以及如何在订阅中摆脱订阅。

this.service
  .service1('something')
  .pipe(takeUntil(this.unsubscribe))
  .subscribe(
    (s1result) => {
      if (s1result.IsOK) {
        this.service
          .service2()
          .pipe(take(1))
          .subscribe((s2result) => {
            'IS OK MESSAGE';
          });
      } else {
        'NOT OK MESSAGE';
      }
    },
    () => {}
  );

标签: angularrxjs

解决方案


你可以这样使用switchMap

this.service
  .service1('something')
  .pipe(
       takeUntil(this.unsubscribe),
       switchMap((s1result)=> {
         if (s1result.IsOK) {
           return this.service
            .service2()
            .pipe(take(1));
        } else {
          return of(EMPTY);
        }
       })
  )
  .subscribe(
    (s2result) => {
      s2result ? 'IS OK MESSAGE' : 'NOT OK MESSAGE';
    });

推荐阅读