[英]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.