情况如下: 我有一个用于应用程序和服务器之间通信的网络套接字。如果 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() })
);
}
如果你想在 RxJS 链中使用 Angular 信号,你需要使用 toObservable
提供的
@angular/core/rxjs-interop
将其转换为 Observable:
然后就可以在
takeUntil()
内使用它
takeUntil(toObservable(this.WSStatus))
注意,您可能需要自己提供 Injector,因为
toObservable
默认使用 inject(Injector)
,我认为这仅在组件构造函数中可用。