uniqueUntilChanged设置初始值

时间:2018-08-16 12:17:07

标签: observable distinct-values rxjs6

对于rxjs,使用distinctUntilChanged时可以提供初始值吗?似乎在没有收到以前的值时完全跳过了equals检查。当它收到的第一个值是初始值时,我不希望发出任何东西。


用例

就我而言,我正在使用angular,正在使用反应性表单并订阅其值更改。由于它是一个输入字段,因此我有一个典型的管道设置:

  • debounceTime(350)
  • distinctUntilChanged()

当用户将初始字段从空字段更改为某个字段,然后在去抖时间内再次为空时,无论如何都将触发该事件。


我尝试过的事情

  • distinctUntilChanged中提供自定义的equals方法
    • 无法正常工作,因为在第一次封装时管道会完全跳过
  • 使用默认值在基础主题上强制使用next
    • 在去抖动时间之后,它仍然会发出一个值,我宁愿避免使用

2 个答案:

答案 0 :(得分:3)

您可以使用skip跳过第一个发射,或使用skipWhile仅跳过初始值。

obs.pipe(
  debounceTime(350),
  distinctUntilChanged(),
  skipWhile(value => value === initialValue) // or skip(1)
) 

答案 1 :(得分:1)

您可以尝试startWith

const valueChanges$ = this.form
  .get('CONTROL_NAME')
  .valueChanges
  .pipe(
    startWith('INITIAL_VALUE'),
    distinctUntilChanged(),
    skip(1)
  )
  .subscribe((value: string) => { ... });