rjx js обрабатывает сетевые ошибки из socket.io-клиента - PullRequest
1 голос
/ 04 мая 2020

Я использую клиент rx js и socket.io. Я бы хотел решить эту проблему.

  1. сокет подключен
  2. пользователь отправляет данные
  3. в сети произошла ошибка при доставке
  4. доставка faled
  5. ошибка броска сокета пользователю

Вот мой код. как обрабатывать ошибки сети indise Observable?

   private sendData(data: any, event: SOCKET_EVENTS): Observable<any> {   
    return new Observable<any>(observer => {
      this.socket
        .emit(event, data, function(responseData: Result<any>) {
          console.log("Data sended", responseData);
          if (responseData.success === true) {
            observer.next(responseData.data);
            observer.complete();
          } else {
            console.error(" this.socketData not sended", responseData);
            observer.error(data);
          }
        })
     });
  }

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете обрабатывать ошибки глобально, используя событие error или что-то еще. Для каждого отдельного излучения вы можете использовать подтверждений . В любом случае, процедура обработки ошибок должна быть более сложной. Например:

private sendData(data: any, event: SOCKET_EVENTS): Observable<any> {   
return new Observable<any>(observer => {
  // set timeout before call error
  let errorTimeout = setTimeout(() => {
      console.error(" this.socketData not sended");
      observer.error();
  }, 5000);

  this.socket
    .emit(event, data, (responseData: Result<any>) => {
      console.log("Data sended", responseData);
        observer.next(responseData.data);
        observer.complete();

        // reset timer
        clearTimeout(errorTimeout);
    })
 });

}

Мы ожидаем ответа в течение 5 секунд. Также вы должны добавить logi c для обработки глобальных ошибок.

...