【发布时间】:2021-11-09 06:49:12
【问题描述】:
我正在将 exhaustMap 应用于一个 observable,从该 observable 中创建两个投影的 observable。在第一个预计的 observable 完成之前,两个预计的 observable 中的第二个不应该开始发射。因此,我希望输出 observable 能够从两个投影的 observable 中发出项目。但由于某种原因,第二个 observable 被忽略了。请注意,第二个投影的 observable 直到 7 秒后才开始发射——这远远超过了第一个投影的 observable 发出最后一个项目的时间点。这是我的代码示例:
import { from } from 'rxjs';
import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
import { map, mergeMap, exhaustMap, delay, mergeAll } from 'rxjs/operators';
const getData = (param) => {
if (param == 'a') {
return interval(1000).pipe(
map(val => param + '-' + val.toString()),
take(4),
delay(1000)
)
}
else if (param == 'b') {
return interval(1000).pipe(
map(val => param + '-' + val.toString()),
take(4),
delay(7000)
)
}
}
// using exhaustMap
from(['a','b']).pipe(
exhaustMap(param => getData(param))
).subscribe(val => console.log(val));
【问题讨论】:
-
听起来你在寻找
concatMap的行为。 -
@BizzyBob 不,我知道concatMap,我只是想更好地了解exhaustMap,现在我的困惑已经消除。不过,感谢您的建议。
-
Fan Cheung 澄清了我的误解后,我意识到任何试图以有意义的方式演示排气映射的代码片段都需要设置一个 source 可观察对象,该可观察对象发出带有分隔这些项目的一些时间间隔。例如,请查看这篇文章(并查看“Playground”代码片段):indepth.dev/reference/rxjs/operators/exhaust-map
标签: rxjs