在使用 Subject 发布之前收集几个事件

Collect several events before posting using Subject

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

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

如果我没猜错,您需要在触发 subject 后取消订阅 keydown$。比你需要使用 takeUntil 运算符:

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

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

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) )

您正在寻找 bufferTime:

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