我如何按顺序订阅 return 只有 RxJS 中最后一个可观察值的值?
How do I subscribe in sequence and return only the value from the last observable in RxJS?
我在 Angular 路由解析器中,想要 return 一个可观察对象。
我需要按顺序订阅多个异步进程:
A => B(a) => C(b)
C 依赖于 B,B 依赖于 A。A 必须完成,然后是 B,然后是 C,但我只想使用来自 C 的值来导致路由解析。
我尝试了两种不同的方法:
return A.pipe(
concatMap(a =>
B(a).pipe(
concatMap(b =>
C(b).pipe((c) => c); // also tried of(c)
)
)
)
);
我也试过了
return A.pipe(
concatMap(a => {
return B(a).pipe(map(b => {a: a, b: b});
),
concatMap({a, b} => {
return C(b);
)
);
如何订阅A,然后订阅B,然后订阅C ...,然后只从最里面的observable中获取值?
如果我在最后一个 concatMap 之后点击一下,我会得到预期的 return 值。但是我的解析器从来没有解析过? (或者发出了错误的东西?我真的不知道。)
如果链中的一个 observable 从未完成(如路由参数或查询参数),它将停止整个列车。
switchMap
应该做:
A.pipe(
switchMap(B), // which is more or less the same as `switchMap(a => B(a))`
switchMap(C),
).subscribe(//...
路由解析器需要在 Angular 路由器继续之前完成。路线守卫也是如此。添加一个接受发射的运算符,例如 take(1) 或 first() 并完成将解决问题。
return A.pipe(
concatMap(a => {
return B(a).pipe(map(b => {a: a, b: b});
),
concatMap({a, b} => {
return C(b);
),
take(1)
);
我在 Angular 路由解析器中,想要 return 一个可观察对象。
我需要按顺序订阅多个异步进程:
A => B(a) => C(b)
C 依赖于 B,B 依赖于 A。A 必须完成,然后是 B,然后是 C,但我只想使用来自 C 的值来导致路由解析。
我尝试了两种不同的方法:
return A.pipe(
concatMap(a =>
B(a).pipe(
concatMap(b =>
C(b).pipe((c) => c); // also tried of(c)
)
)
)
);
我也试过了
return A.pipe(
concatMap(a => {
return B(a).pipe(map(b => {a: a, b: b});
),
concatMap({a, b} => {
return C(b);
)
);
如何订阅A,然后订阅B,然后订阅C ...,然后只从最里面的observable中获取值?
如果我在最后一个 concatMap 之后点击一下,我会得到预期的 return 值。但是我的解析器从来没有解析过? (或者发出了错误的东西?我真的不知道。)
如果链中的一个 observable 从未完成(如路由参数或查询参数),它将停止整个列车。
switchMap
应该做:
A.pipe(
switchMap(B), // which is more or less the same as `switchMap(a => B(a))`
switchMap(C),
).subscribe(//...
路由解析器需要在 Angular 路由器继续之前完成。路线守卫也是如此。添加一个接受发射的运算符,例如 take(1) 或 first() 并完成将解决问题。
return A.pipe(
concatMap(a => {
return B(a).pipe(map(b => {a: a, b: b});
),
concatMap({a, b} => {
return C(b);
),
take(1)
);