首页 > 解决方案 > 如果 RxJS 中的条件为真,我可以跳过所有后续的运算符链吗

问题描述

是否可以在 RxJS 5.5 中使用某个运算符来实现条件以跳过所有后续运算符并发出一些值 ( false)?例如,在这个 ng 服务方法中,如果出现以下情况,我会绕过这个.map链并false立即提供价值response.length === 0

getProjectDrivers(projectId): Observable<any> {
  return this.http.get('someUrl').pipe(
    // if (response.length === 0) { return false; and skip whole operator chain bellow}
    map((response: ProjectDriver[]) => response.filter((projectDriver: ProjectDriver) => projectDriver.streamName !== "AllRevenueStreamTotals")),
    map((response: ProjectDriver[]) => command => ({})
  )
)
.catch(this.handleError);

}

标签: angulartypescriptrxjs

解决方案


我想你总是可以玩switchMap

  return this.http.get('someUrl').pipe(
    switchMap(response => {
      if (!response.length) {
        return of(null);
      } else {
        return of(result).pipe(
          map((response: ProjectDriver[]) => response.filter((projectDriver: ProjectDriver) => projectDriver.streamName !== "AllRevenueStreamTotals")),
          map((response: ProjectDriver[]) => command => ({}))
        )
      }
    }
  )

推荐阅读