【问题标题】:How to optimize the number of observers in Observables function?如何优化 Observables 函数中的观察者数量?
【发布时间】:2018-09-28 17:36:02
【问题描述】:
return new Observable(observer => {
  this.isLocationEnabled()
      .subscribe(
        isEnabled => {
          if(isEnabled) {
            observer.next(true);
          } else {
            this.resolveRequestLocationEnable() //notice this duplicate method
                .subscribe(
                  success => observer.next(success),
                  error => observer.error(error)
                );
          }
        },
        error => {
          this.resolveRequestLocationEnable() //notice this duplicate method
              .subscribe(
                success => observer.next(success),
                error => observer.error(error)
              );
        }
      );
}).first();

这是一个大函数的示例,它返回一个 Observable 并使用观察者将错误/旁边转移给消费者

您认为有什么方法可以改善这一点吗?使用任何其他可观察的方法或模式

【问题讨论】:

    标签: angular observable observers


    【解决方案1】:

    嵌套订阅块是一种反模式。那可以简单得多。试试这个:

     import { of } from 'rxjs/observable/of';
     import { catchError, mergeMap } from 'rxjs/operators';
    
     this.isLocationEnabled().pipe(
      catchError(() => of(true)),
      mergeMap(isEnabled => isEnabled 
        ? of(true) 
        : this.resolveRequestLocationEnable()
    );
    

    catchError 运算符忽略来自isLocationEnabled 流的错误,并继续进行resolveRequestLocationEnable() 调用,因为您希望在出现错误和成功的情况下调用该方法。

    接下来,如果isEnabled 为真,我们将立即返回of(true)。如果为 false,我们将返回来自 resolveRequestLocationEnable() 的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多