仅当第一个可观察值为空时,Angular rxjs 才订阅第二个可观察值

pra*_*wal 4 rxjs angular angular8

我有两种返回可观察值的方法。如果首先返回一些数据则无需调用第二个方法。但如果第一个方法返回 null,则仅调用第二个方法。

getdefaultAddress(id) : Observable<Address[]> { 
    return this.http.get<Address[]>(this.url + 'users/' + id + '/addresses' + '?filter[where][default]=true')
  }

getFirstAddress(id): Observable<any>{
    return this.http.get<any>(this.url + 'users/' + id +'/addresses?filter[limit]=1'  )
  }
Run Code Online (Sandbox Code Playgroud)

在使用 if-else 订阅第一个可观察值后,我可以轻松地做到这一点。喜欢

this.getdefaultAddress(id).subscibe(data =>{
    if(data) {
      // do something
    }

    else {
      this.getFirstAddress(id).subscibe(data =>{
        // do something
      })
    }
  })
Run Code Online (Sandbox Code Playgroud)

现在我如何在不真正订阅第一个可观察对象的情况下检查这一点?有 rxjs 运算符吗?

先感谢您

Jon*_*wag 6

const source1$: Observable<T| null>;
const source2$: Observable<T>;

const finalSource$ = source1$.pipe(
  switchMap(value => value ? of(value) : source2$) 
)
Run Code Online (Sandbox Code Playgroud)

只要外部源具有值,您就可以返回它。当它变得未定义/空时/事件,您切换到 source2$。