遵循rxjs和不同指南页面的文档,不能解决debounceTime无法正常工作的问题。

function getValue() {
  return new rxjs.Observable(sub => {
    let counter = 0;
    setInterval(() => {
      counter++;
      sub.next(counter);
    }, 100);
  });
}


// Removing debounceTime works or set it to a value < 100.
getValue().pipe(rxjs.operators.debounceTime(1000)).subscribe(data => {
  console.log(data);
});


https://jsfiddle.net/5bp1cwho/7/

我希望该值是每秒钟而不是100毫秒。

最佳答案

去抖时间


  签名:debounceTime(dueTime:数字,调度程序:Scheduler):
  可观察的
  
  丢弃发射时间间隔少于指定时间的发射值
  输出


您发射的所有项目之间的距离均小于1000毫秒,因此将其丢弃。

注意:默认情况下,第一项不会直接发出。

如果只想获取最后一个操作,则auditTime是要搜索的操作符。

auditTime


  忽略源值duration毫秒,然后发出
  来自源Observable的最新值,然后重复此操作
  处理。


function getValue() {
  return rxjs.interval(100);
}


// keep the last element after 1000ms
getValue().pipe(rxjs.operators.auditTime(1000)).subscribe(data => {
  console.log(data);
});


如果要对1000毫秒内接收到的所有元素进行特定处理,则可以使用bufferTime。

缓冲时间


  签名:bufferTime(bufferTimeSpan:数字,
  bufferCreationInterval:数字,调度程序:Scheduler):可观察
  收集发出的值,直到经过指定的时间为止,以数组形式发出。


function getValue() {
  return rxjs.interval(100);
}

getValue().pipe(
  rxjs.operators.bufferTime(1000),
  rxjs.operators.map(itemsList => Math.max(itemsList))
)
.subscribe(data => {
  console.log(data);
});

关于javascript - Rx DebounceTime不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51359607/

10-12 15:25