我正在尝试订阅一个返回布尔值的“加载”Observable。如果加载为true,则目标是对流中的项进行延迟,但如果加载为false则不延迟。也应该可以忽略过时的项目,让我们假设以下情况:
在流中有两个项目:
项目A的值为true,因为它将延迟500ms,项目B不会延迟。在这种情况下,项目B将在项目A之前到达。我正在寻找一个完全忽略上述案例的项目A的解决方案。
在这里,您可以看到我目前尚未解决的问题:
this.loading$
.pipe(
distinctUntilChanged(),
delayWhen(loading => timer(loading ? 500 : 0))
)
.subscribe(loading => {
// Do something
});
答案 0 :(得分:1)
只需将delayWhen
替换为switchMap
即可。 switchMap
可以取消过时的内部流。你可能是一次性的可观察而不是计时器:
this.loading$
.pipe(
distinctUntilChanged(),
switchMap(
loading =>
of(loading).pipe(delay(loading ? 500 : 0)))
)
.subscribe(loading => {
// Do something
});