在使用主题发布之前收集多个事件

时间:2018-02-21 05:43:26

标签: javascript rxjs reactivex

在我发送请求之前,我需要收集几个事件,而不是每次都收集。

const subject = new Subject();
subject.subscribe((event) => post(event));
const keydown$ = fromEvent(document, 'keydown');
keydown$.subscribe(d => subject.next(d);

2 个答案:

答案 0 :(得分:1)

您正在寻找bufferTime

keydown$.bufferTime(2500).subscribe(…);

bufferTime

答案 1 :(得分:0)

如果我找到了你,你需要在keydown$被触发后取消订阅subject。您需要使用takeUntil运算符:

keydown$.takeUntil(subject).subscribe(d => subject.next(d);

如果您可以按时间汇总事件,可以使用像

这样的smth
const DELAY_TIME = /** some delay time */ 2000;
const subject = new Subject();
subject.subscribe((event) => post(event));
const keydown$ = fromEvent(document, 'keydown');
keydown$
  .scan( (acc, cur) => [ ...acc, cur ], [] )
  .delay(DELAY_TIME)
  .last()
  .subscribe( eventsArray => subject.next(eventsArray) )