在使用 Typescript 時,我在將 observable 鏈接在一起時遇到了一些問題,因此它是有道理的。所以在我寫的這個示例中,ia 條件將取決于它的值,將執行一個函式或在執行該函式之前做一些預處理。
這樣做時,我注意到問題區域試圖回傳一個Observable<Observable<number>>不是我的目標。我的想法是回傳內在價值,但我不確定如何真正處理它。
b(data: number): Observable<number> { return of(data); } // This is a stub.
a(data: number): Observable<number> {
const fn = (x): Observable<number> => {
return of(x) // this is a stub which would be the result of an http request.
}
if(data < 3) {
return fn(data);
} else {
return b(data).pipe(map( x => fn(x) )) // Problem line
}
}
這個應該怎么處理?我在想可能有一種方法可以使用 Promise 來處理這個問題,但我認為這會弄亂函式簽名,因為我需要將它們標記為異步。我很難過,希望得到一些指導。
uj5u.com熱心網友回復:
您遇到的問題是一個條件回傳一個 observable,而另一個條件回傳一個回傳一個 observable 的 observable。您應該使用展平運算子之一,例如switchMap、concatMap或mergeMap。
return b(data).pipe(switchMap(x => fn(x)))
也許這也可以從重新設計中受益?取而代之的是有兩個單獨的回傳,從條件陳述句的結果創建一個流,并將其通過管道傳輸到函式。這樣你就不必定義一個函式,這樣你就可以在兩個地方使用它。
b(data: number): Observable<number> { return of(data); } // This is a stub.
a(data: number): Observable<number> {
const src$ = data < 3 ? of(data) : b(data);
return src$.pipe(switchMap(x => of(x) /* your stub function */));
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345355.html
