Rx DebounceTime不起作用

时间:2018-07-16 10:22:16

标签: javascript rxjs

按照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毫秒。

1 个答案:

答案 0 :(得分:1)

去抖时间

  

签名: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

  

签名: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);
});