RxJS - 油门后的去抖事件?

Roy*_*mir 10 javascript rxjs

我让用户滚动页面并在每个滚动事件中 - 我正在检查视口中是否有新项目
(如果有,我对这些新项目进行一些操作 - 现在无关紧要).

所以我有这样的事情:

 const observable = Rx.Observable.fromEvent(window, 'scroll');

  const subscriber = observable.throttleTime(300 /* ms */).subscribe(
          (x) => {
            console.log('Next: event!');
          },
          (err) => {
            console.log('Error: %s', err);
          },
          () => {
            console.log('Completed');
          });
Run Code Online (Sandbox Code Playgroud)

此代码按预期工作,我确实在每300毫秒后看到一条消息.

但是有一个问题.用户可能在未完成300毫秒时滚动(不会引发事件)并且滚动时新项目可见.

这是我需要这种debounce方法的地方.(表示"在上次活动时间的X毫秒之后 - 举起活动")

这正是我需要的.

我试过这个 :

 const subscriber = observable.throttleTime(300 /* ms */).debounceTime(350)....
Run Code Online (Sandbox Code Playgroud)

但我只看到了被淘汰的事件.

如何使用油门和油门结束 - 附加去抖?

Yur*_*nko 8

您可以合并两个流:使用限制和去抖动merge.演示.

  const observable = Rx.Observable.fromEvent(window, 'scroll');

  const subscriber = observable
      .throttleTime(300 /* ms */)
      .map(() => 'throttle')
      .merge(observable
              .debounceTime(350)
              .map(() => 'debounce')
      )
      .subscribe(
          (x) => {
            console.log('Next: event!', x);
          },
          (err) => {
            console.log('Error: %s', err);
          },
          () => {
            console.log('Completed');
          });
Run Code Online (Sandbox Code Playgroud)