Angular 17 - 每当布尔变量变为 true 且只要它保持不变时,就会触发循环轮询

问题描述 投票:0回答:1

情况如下: 我有一个用于应用程序和服务器之间通信的网络套接字。如果 Websocket 损坏,我想启用备份长轮询,直到 Websocket 再次激活。

我想创建一个 Signal 布尔值,根据 WS 的连接/断开来更改状态。如果 WS 处于活动状态,我将信号设置为 true,否则设置为 false。

 WSStatus = signal(false);
 WS is up: this.WSStatus(true)
 WS go down: this.WSStatus(false)

我想过做这样的事情,但是 takeUntil 等待 Observable,我无法用 Observable 替换 Signal 操作

 this.startPolling(5000).pipe(takeUntil(!this.WSStatus())).subscribe()
 startPolling(interval: number = 5000): Observable<string> {
  
    return timer(0, interval)
      .pipe(
        switchMap( () => { return this.myHttpRequest() })
      );
  }
javascript angular rxjs polling
1个回答
0
投票

如果你想在 RxJS 链中使用 Angular 信号,你需要使用 toObservable

 提供的 
@angular/core/rxjs-interop
 将其转换为 Observable:

然后就可以在

takeUntil()

内使用它
takeUntil(toObservable(this.WSStatus))

注意,您可能需要自己提供 Injector,因为

toObservable
默认使用
inject(Injector)
,我认为这仅在组件构造函数中可用。

© www.soinside.com 2019 - 2024. All rights reserved.