簡體   English   中英

Observable.combine即使失敗也會繼續

[英]Observable.combineLatest continue even if one fails

我有一個需要從firebase解析多個文檔的函數

  fetchDocuments(documentIds: string[]): Observable<TreeNodeDocument[]> {
    const observables = [];
    for(let id of documentIds){
      observables.push(this.fetchDocument(id));
    }
    return Observable.combineLatest(observables, (...docs: TreeNodeDocument[]) => {
      //some transformations on the resolved documents
      return docs;
    });
  }

this.fetchDocument(id)返回TreeNodeDocument類型的observable。

只要可以解析所有文檔,此功能就可以使用。 現在有時會發生某些文檔無法解析,然后相應的fetchDocument(id) observable將失敗。 沒關系,預計有些文件無法解決。 但是,如果其中一個失敗,則Observable.combineLatest完全失敗(我知道這是一個很好的默認行為)。

我現在的問題是,我可以在某種程度上使用combineLatest ,因此我只獲取fetch工作的文檔而忽略了失敗的文檔嗎? 或者我可以用不同的方式實現這一目標嗎?

干杯

您可以使用catchError來管道每個源Observable(每個this.fetchDocument(id) ),它將使用虛擬next項目(或任何您想要的內容)替換error通知。

for (let id of documentIds){
  observables.push(this.fetchDocument(id).pipe(
    catchError(() => of(null)),
  ));
}

...

注意,你不能只使用empty()of()因為它們都不會發出任何next項目,並且combineLatest不會像你期望的那樣工作。 當然,您可以使用您想要的任何東西,而不是null 在源Observable失敗的索引處,docs數組將為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM