У меня есть Наблюдаемая myObservable
, которая получает некоторые предметы с разными интервалами времени.Например, интервал времени между первым и вторым элементом может составлять 1 секунду, а для второго и третьего элемента - 3 секунды.Для каждого элемента отправляется HTTP-запрос методом this.sendMessage()
.
Проблема в том, что интервал времени между запросами должен составлять не менее двух секунд.Задержка всех запросов на две секунды - не лучшее решение.Например, для первого запроса я не хочу задержки.Я тоже не хочу задержки, когда разница во времени между двумя испускаемыми элементами превышает две секунды.
Это рабочее решение, которое делает то, что я хочу.Но мне интересно, есть ли более 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 => {
});