【发布时间】:2018-11-26 12:07:21
【问题描述】:
我有一个 Observable myObservable,它可以获取一些以不同时间间隔发出的项目。例如,第一项和第二项之间的时间间隔可以是 1 秒,而第二项和第三项之间的时间间隔可以是 3 秒。
对于每个项目,使用this.sendMessage() 方法发送一个 HTTP 请求。
问题是请求之间的时间间隔至少应该是两秒。将所有请求延迟两秒钟并不是最好的解决方案。例如,对于第一个请求,我不想延迟。当两个发射项目之间的时间差超过两秒时,我也不想要延迟。
这是一个可行的解决方案,可以满足我的需求。但是我想知道是否有更多类似rxjs的解决方案?我和delay() 和delayWhen() 一起玩,但我没有找到让它工作的方法。
有人有解决办法吗?
let lastSendTimestamp = null;
myObservable.pipe(
concatMap(async body => {
// Calculate delay time
let delayTime = 0;
if (!lastSendTimestamp) {
delayTime = 0;
} else if (Date.now() - lastSendTimestamp > 2000) {
delayTime = 0;
} else {
delayTime = 2000 - (Date.now() - lastSendTimestamp);
}
// Wait until delay is over
await new Promise(resolve => setTimeout(resolve, delayTime));
lastSendTimestamp = Date.now();
return await this.sendMessage(body);
}),
).subscribe(result => {
});
【问题讨论】:
标签: javascript rxjs delay