当我在打字稿上工作的时候,我遇到了一些问题,把可观察到的东西链接在一起,这样就有意义了。因此,在这个示例中,我编写了一个条件,它将取决于它的值,或者执行一个函数,或者在执行函数之前做一些预处理。
在这样做的时候,我注意到问题区域试图返回一个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
}
}这应该如何处理呢?我在想,也许有一种方法可以使用承诺来处理这个问题,但我认为这会扰乱函数签名,因为我需要将它们标记为异步。我很困惑,希望得到一些指导。
发布于 2021-11-01 21:44:30
问题是,一个条件返回一个可观测的条件,而另一个条件返回一个可观察的条件。您应该使用一个扁平化操作符,例如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://stackoverflow.com/questions/69801888
复制相似问题