在使用 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(…);
在发送请求之前,我需要收集多个事件,而不是每次。
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(…);