RxJS/Angular 专家,需要您的意见/指点
我试图在 Observable 上添加一个逻辑(通过 http 调用创建)
如果在前 3 分钟内没有从 Observable 发出第一个事件,我想返回(退出等待并停止对 observable 的订阅)
但是如果第一个事件在前 3 分钟内发出,我想继续订阅并获取总共 10 分钟的数据(从订阅开始的时间开始)
到目前为止,使用 takeUntil(timer(1000 * 60 * 10) 等待总共 10 分钟,但希望将这个等待分为 3 分钟,如果有响应 -> 则仅延长 7 分钟
伪代码
Observable
.pipe(
takeUntil(timer(10* 60 * 1000)),
map (res => {}),
filter()
)
.subscribe(
)
注意:上面的调用包装了 EventSource SSE 调用
我想使用开箱即用的 RxJS 超时,但不符合我的要求
最佳答案
使用race
第一个 x 分钟条件的运算符, takeUntil
被传递到第二个条件的 http 请求中:
fistTimerBenchMark$ = timer(3000).pipe(switchMap(x => throwError('ended before 3s')));
//Mock http request
mockHttp$ = timer(2000,2000).pipe(map(x => 'http respones'),takeUntil(timer(10000)));
ngOnInit(){
race(this.fistTimerBenchMark, this.mockHttp$)
.subscribe( x => console.log(x), err => console.log(err))
}
此外,我使用 throwError
来完成第一个 x 分钟条件的可观察量,因为在可观察量的管道或订阅者中取消订阅它不是一个好的约定。
关于angular - RxJS Observable - 如果第一个事件在前 x 分钟内未发出,则返回,否则继续 x+y 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57471402/