Как правильно обрабатывать HttpClient?

#angular #typescript #ionic-framework #httpclient

#angular #typescript #ионный фреймворк #httpclient

Вопрос:

Это мой текущий код,

service.ts

 export class ApiServiceFunction {
    constructor(
        private http: HttpClient
    ) { }

    // in app.ts for test connection
    testConnection() {
        return this.http.get(`${environment.apiUrl}/connection`)
        .pipe(
            catchError(err => {
                console.log('Handling error locally and rethrowing it...', err);
                return throwError(err);
            })
        );
    }
}
 

component.ts

   private testConnection() {
    this.ApiServiceFunction.testConnection()
    .subscribe(
      data => {
        console.log('data ', data)
      },
      error => {
        console.log('error ',error)

      },
    );
  }
 

В консоли отображается ошибка

Локальная обработка ошибки и ее повторное удаление… Неизвестная ошибка

app.component.ts: 190 ошибка Неизвестная ошибка

zone-evergreen.js:2845 ПОЛУЧИТЬ http://172.16.0.115:8080/connection net::ОШИБКА_INTERNET_DISCONNECTED

Я хочу получить тест на ошибку «ERR_INTERNET_DISCONNECTED»

Комментарии:

1. Проверьте это руководство: joshmorony.com /…

2. @NajamUsSaqib спасибо, что поделились. Я взглянул на пример, но он не решает мою проблему. Проблема в том, что я не могу получить точную ошибку при возникновении ошибки.

Ответ №1:

мы можем справиться с этим вручную.

Вы должны добавить метод, который дает нам статус пользователя

затем в catchError поведении дескриптора блока

     get isOnline() {
        return navigator.onLine;
    }

    testConnection() {
        return this.http.get(`${environment.apiUrl}/connection`)
            .pipe(catchError(e => {
                if (!this.isOnline) {
                    return throwError('ERR_INTERNET_DISCONNECTED')
                }
                return throwError(e)
            })
    }
 

Комментарии:

1. Это были хорошие советы по использованию navigator.online. Но, как проверить, — net::ERR_NETWORK_CHANGED — net::ERR_CONNECTION_TIMED_OUT

2. это другой вопрос

3. @saifuladham в вашем случае мы можем реализовать OfflineInterceptor, который будет отслеживать изменения. Смотрите ссылку netbasal.com /…

Ответ №2:

Я полагаю, что вы можете просто извлечь ошибку из строки ошибки, пример того, как это можно сделать с помощью регулярного выражения, приведен ниже

 const err = "zone-evergreen.js:2845 GET http://172.16.0.115:8080/connection net::ERR_INTERNET_DISCONNECTED unknown err";

const extractErr = err.match(/net::([A-Z|_] )/gm)[0].split('::')[1]

console.log(extractErr)