【发布时间】:2022-01-24 13:20:46
【问题描述】:
我有一个显示来自套接字的数据的 Angular 组件。此视图还具有过滤和搜索功能。过滤器/搜索是 Angular 表单控件。
我使用 combineLatest 来组合所有过滤器/搜索表单控件的 valueChanges 可观察对象(它们具有 startWith(''))和我的套接字可观察对象。这有助于在一个方便的地方处理数据更新和过滤更新。
由于 combineLatest 等待所有 Observables 至少发出一次...我遇到的问题是在过滤器/搜索 observables 设置并第一次发出之前,socket observable 发出了几次,因此我错过了很少需要来自套接字的数据事件。
为了简单起见,我在下面创建了一个带有计时器的简单示例。
combineLatest([
timer(0, 1000),
timer(10000, 1000)
]).subscribe(([timerOne, timerTwo]) => {
console.log(`Timer One Latest: ${timerOne}, Timer Two Latest: ${timerTwo}`);
})
combineLatest 第一次发出时,定时器一已经是 9,定时器二是 0。这与我的 Angular 视图相同,套接字事件在第一次发出 combineLatest 之前已经发出了几次。我探索了缓冲或延迟第一个计时器,但没有任何效果。
我想知道是否有办法确保不会遗漏 combineLatest 中的可观察数据? 也许,在第一次 combineLatest 发射时,发射所有 timerOne 值。或者,触发 combineLatest x 次 timerOne 发出...或者我可能只是没有使用正确的运算符。
【问题讨论】:
-
您可以在
startWith('')的帮助下为每个来源发出一次,听起来它应该可以解决您的问题
标签: angular rxjs rxjs6 rxjs-observables