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

Javascript 在使用主题发布之前收集几个事件,javascript,rxjs,reactivex,Javascript,Rxjs,Reactivex,在发送请求之前,我需要收集几个事件,而不是每次 const subject = new Subject(); subject.subscribe((event) => post(event)); const keydown$ = fromEvent(document, 'keydown'); keydown$.subscribe(d => subject.next(d); 如果我没弄错的话,你需要在主题被触发后取消订阅keydown$。而您需要使用takeUntil运算符: key

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

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

如果我没弄错的话,你需要在主题被触发后取消订阅keydown$。而您需要使用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) )
您正在寻找:


不,我不需要在这里发送一个事件,例如,事件数组subject.subscribeevent=>postevent;您何时需要停止收集事件?请更详细地解释问题是什么我不需要阻止它。我想在页面处于活动状态时收集事件。但不是每次事件触发时都发送请求,我希望此时发送多个事件。您可以使用“扫描”操作符将事件收集到数组中,如“.scanacc,cur=>acc.pushcur,[]”。但是您必须使用BehaviorSubjectkeydown$.scan acc,cur=>[…acc,cur],].delayDELAY\u TIME.last.subscribe Events RAY=>。。。请澄清您希望通过哪种逻辑聚合事件。到时候呢?按数字?
keydown$.bufferTime(2500).subscribe(…);