angular - RxJS Observable - 如果第一个事件在前 x 分钟内未发出,则返回,否则继续 x+y 分钟

标签 angular rxjs observable server-sent-events

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 超时,但不符合我的要求

最佳答案

A working stackblitz example

使用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/

相关文章:

typescript :如何在任何地方调用不使用 "this"的变量

javascript - 使用 RXJS,有没有办法生成一个可观察对象,当源可观察对象当前发出的项目数量相同时,该可观察对象会发出?

javascript - 重新创建时 knockout PureCompulated 调用订阅者

java - 等待两个 Observable 完成后再继续?

angular - 我可以订阅非 http 数据吗?如何订阅?

angular - 对于大部分相似但地方不同的组件,Angular 的最佳实践是什么?

javascript - Angular 2 ngModel 不工作(仅限 javascript)

angular - ng build --prod 没有为 angular-cli.json 中指定的 outDir 提供此类文件或目录错误

javascript - 无法在anglar4中导入RX

rxjs - 在恢复之前等待 RxJs.Subscription