RX JS Проблемы с подпиской на Websocket Subject - PullRequest
0 голосов
/ 30 января 2020

У меня есть класс обслуживания (Ang 8+), который управляет созданием веб-сокета с помощью rxjs/webSocket() factory:

@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;
      }

и компонента, который использует член wsSubj в своем методе ngOnInit:

  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 UP

websocket-manager.ts: ok

component.ts: HomeComponent WS OK

// сервер веб-сокета DOWN

component.ts: HomeComponent WS ERROR CATCH

websocket-manager.ts: ' Ошибка веб-сокета '

// Сервер веб-сокета UP

websocket-manager.ts: ok

// Сервер веб-сокета DOWN

websocket-manager.ts: «Ошибка Websocket»

Короче говоря, после первого события «Отключение сервера» больше нет обращений к компоненту, но подписка внутри менеджера websocket по-прежнему работает хорошо.

Почему? Что мне нужно сделать, чтобы добраться до компонента после первого события down?

...