1 回答

TA貢獻1946條經驗 獲得超3個贊
使用錯誤的原因switchMap是因為您沒有返回 Observable。
當使用任何“高階映射運算符”(switchMap、concatMap、mergeMap 等)時,提供的函數必須返回一個可觀察對象。正如錯誤所述:“類型void不可分配給類型ObservableInput<any>”,您沒有返回任何東西(無效)。
接下來不太正確的是,在您的循環中,您引用ref.snapshotChanges().pipe()了 ,但您從不訂閱它。您可能知道,可觀察對象是惰性的,除非有訂閱者,否則不會觸發。
只要您在 中返回一個可觀察對象switchMap(),它就會自動訂閱它并發出它的值。
讓我們換個角度思考這個問題;而不是遍歷第一次調用的結果,執行它們,然后將值推入數組。相反,我們可以獲取結果并將它們變成一個可觀察的流,該流發出它們各自調用的所有結果,并為您將它們組合成一個數組。但是......有一個微妙的區別:我建議不要tagData在流之外有一個單獨的數組,而是讓你的可觀察對象返回tagData你需要的形式作為Observable<TagData[]>.
我認為這樣的事情對你有用:
tagData$ = this.pageService.getTagsOnPage(this.workspaceId, this.currentPage.id).pipe(
switchMap(references => from(references)),
mergeMap(ref => this.afs.doc(ref).snapshotChanges()),
map(actions => actions.payload.data()),
scan((allTagData, tagData) => [...allTagData, tagData], [])
})
);
讓我們分解一下!
現在,您可以簡單地執行:tagData$.subscribe()
并使用生成的數據數組執行您想要的操作?;蛘吣闵踔量梢栽谀愕哪0逯惺褂?a >異步管道而不是在你的組件中訂閱。
添加回答
舉報