gpt4 book ai didi

Angular - 如何防止具有依赖可观察量的嵌套管道?

转载 作者:行者123 更新时间:2023-12-02 17:06:05 25 4
gpt4 key购买 nike

为了保持代码干净,我尝试在可观察量方面防止嵌套管道。然而,我遇到了一个星座(见下面的代码),我找不到没有办法的办法。请问有没有办法只用一根管道就可以解决这个问题?

示例代码:

class CannotSimplify {

observableA(): Observable<number> {
return of(1);
}

bDependentA(a: number): Observable<number> {
return of(2 + a, 3 + a);
}

cDependentOnAAndB(a: number, b: number): Observable<number> {
return of(a + b);
}

printResult(): void {
this.observableA()
.pipe(
switchMap(a => this.bDependentA(a)),
switchMap(b => this.cDependentOnAAndB(a, b)) // <-- error: a is undefined
)
.subscribe(c => console.log(c));
}

}

我能想到的唯一解决方案是再次管道 this.bDependentOnA() 。有更好的方法吗?

提前致谢!

最佳答案

我认为你可以使用zip运算符。

this.observableA()
.pipe(
switchMap(a => zip(of(a), this.bDependentA(a))),
switchMap(([a, b]) => this.cDependentOnAAndB(a, b))
)

从 RxJs 版本 7 开始,zip 运算符 将替换为 zipWith。更多信息here .

this.observableA()
.pipe(
switchMap(a => this.bDependentA(a).pipe(zipWith(of(a)))),
switchMap(([b, a]) => this.cDependentOnAAndB(a, b))
)

关于Angular - 如何防止具有依赖可观察量的嵌套管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60302292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com