distinctUntilChanged 设置初始值

Did*_*dii 7 distinct-values observable rxjs6

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


用例

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

  • debounceTime(350)
  • distinctUntilChanged()

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


我试过的

  • 提供一个自定义的 equals 方法 distinctUntilChanged
    • 不工作,因为管道在第一次遇到时被完全跳过
  • next使用默认值对基础主题 强制 a
    • 这仍然会在我宁愿避免的去抖时间之后发出一个值

mtp*_*ltz 7

您可以尝试startWith

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

  • 如果在 `distinctUntilChanged` 之后添加 `skip(1)` 会怎样? (3认同)

m1c*_*4ls 5

您可以用来skip跳过第一次发出或skipWhile仅跳过初始值。

obs.pipe(
  debounceTime(350),
  distinctUntilChanged(),
  skipWhile(value => value === initialValue) // or skip(1)
) 
Run Code Online (Sandbox Code Playgroud)