标签: rxjs-pipe

如何在计时器中继续catchError(rxjs)

我有一个服务负责使用计时器每 x 秒执行一次 httpClient.get 。我需要这个计时器在服务启动时开始运行,因此计时器是在服务 构造函数中定义的。根据我的理解,订阅应该在计时器作用域中注册,如下所示(如果不需要,我不想更改它,除非它不正确)。

只要后端服务器没有出现错误\异常\错误 500 异常,则所有系统都工作正常。现在,我需要两件事:

  1. 每当后端服务器出现问题时,我想捕获Error 。
  2. 我希望观察者能够根据计时器时间(到下一个滴答声)继续运行,即使存在异常。每当出现异常时,我的最终结果应该是到达组件中的 popUpAlert 请参阅我的代码 - 这是 webapi 控制器:
public IActionResult getSomeErrorAsTest()
{
    try
    {
        throw new Exception("Serer error");
    }
    catch(Exception ex)
    {
        return StatusCode(StatusCodes.Status500InternalServerError, new List<string>());
        //throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是服务(假设每个 get 请求中的数据都会发生变化 - 如果确实如此,则无需实现):

export class MyService
{
    MyDataSubject = new Subject<any[]>();
    MyDataChanged :Observable>any[]> = this.MyDataSubject.asObservable();
    
    subscribe :Subscription;
    constructor(private httpClient : HttpClient)
    {
        this.subscribe = timer(0, 30000).pipe(
        switchMap(()=>
            this.getData())).subscribe();
    }
    getData()
    {
        return this.httpClient.get<any[]>(<controller …
Run Code Online (Sandbox Code Playgroud)

timer rxjs angular rxjs-observables rxjs-pipe

4
推荐指数
1
解决办法
2364
查看次数

标签 统计

angular ×1

rxjs ×1

rxjs-observables ×1

rxjs-pipe ×1

timer ×1