RXJS Websocket主题订阅问题

时间:2020-01-30 13:25:29

标签: angular websocket rxjs

我有一个服务类(Ang 8+),该服务类通过使用rxjs/webSocket()工厂管理websocket的创建:

@Injectable({
   providedIn: 'root',
})
export class WebSocketChannel {
    //................
    create(url?: string): Observable<WebSocketPackage<any>> { 
        this.wsSubj = webSocket<WebSocketPackage<any>>(this.channelUrl);
        this.wsSubj.pipe(
          retryWhen(errors => 
            errors.pipe(
              tap(err => {
                console.error('Websocket error', err);
              }),          
              delay(1000),
            ),
          ),
        )
        .subscribe(
          ok => console.log('ok'),
          ko => console.log('ko'),
        );
        return this.wsSubj;
      }

还有一个在其ngOnInit方法中消耗wsSubj成员的组件:

  ngOnInit() {
    this.wsManager.create();
    this.wsManager.wsSubj
    .subscribe(
      data => {
        console.log('HomeComponent WS OK');
      },
      err => {
        console.log('HomeComponent WS ERROR CATCH');
      },
      () => console.log('complete')
    );
  }

这是一些服务器停止/启动后的console.logs:

// Websocket服务器已启动

websocket-manager.ts:好的

component.ts:HomeComponent WS OK

// Websocket服务器关闭

component.ts:HomeComponent WS错误捕获

websocket-manager.ts:“ Websocket错误”

// Websocket服务器已启动

websocket-manager.ts:好的

// Websocket服务器关闭

websocket-manager.ts:“ Websocket错误”

总而言之,在第一次“服务器宕机”事件之后,不再有发射到达组件,但是websocket-manager内的订阅仍然运行良好。

为什么?为了在第一次故障事件发生后到达组件,我该怎么做?

0 个答案:

没有答案