Мне нужно получить объект из ReplaySubject, и я должен выдать ошибку, если в течение 5 секунд не возникнет объект.
Выполните код ниже (и он работает), но я готов найти более элегантное решение.
const replaySubject = new ReplaySubject(1);
function objGet() {
return replaySubject;
}
function objGetWithTimeout() {
const timeout = 5000;
let observed = false;
const objObserver = objGet();
objObserver
.pipe(first())
.subscribe(() => observed = true);
return race(
objObserver,
timer(timeout)
.pipe(map(() => {
if (!observed) {
throw new Error('timeout');
}
})
)
)
}
функция, вызываемая таким образом:
objGetWithTimeout()
.pipe(catchError((err) => console.error('timeout') && throwError(err)))
.subscribe((data) => console.log('obj received', data));