我需要从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));
您可以使用timeoutWith()
运算符:
timeoutWith()