Как обработать тайм-аут RxJs - Angular HttpClient - PullRequest
0 голосов
/ 10 ноября 2018

Как обнаружить ошибку по времени ожидания оператора? Я хотел бы показать предупреждение или что-то подобное, только когда сервер не отвечает.

В моем перехватчике есть похожий код:

this.http.post('http://localhost:3000/api/core', data)
        .pipe(
            timeout(30000),
            map((response: any) => { // Success...
              return response;
            }),
            catchError((error) => { // Error...
              // Timeout over also handled here
              // I want to return an error for timeout
              return throwError(error || 'Timeout Exception');
            }),
            finalize(() => {
              console.log('Request it is over');
            })
        );

["rxjs": "^ 6.0.0", "@ angular / http": "^ 6.0.3",]

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Это работает

import { throwError, TimeoutError } from 'rxjs';

catchError((error) => { // Error...
   // Handled timeout over error
   if (errorResponse instanceof TimeoutError) {
      return throwError('Timeout Exception');
   }

   // Return other errors
   return throwError(error || 'Timeout Exception');
})

Я реализовал это в моем intecerptor, который имеет другие функции, код здесь: https://github.com/dedd1993/ngx-admin/blob/master/src/app/core/http/http.interceptor.ts

0 голосов
/ 10 ноября 2018

Вы можете использовать оператор timeoutWith для достижения этого.

return this.http.post('http://localhost:3000/api/core', data).pipe(
      timeoutWith(3000, observableThrowError(new Error('Http Timeout exceeds'))),
      map((response: any) => { // Success...
              return response;
      }),
      catchError((error: HttpErrorResponse) => this.handleError(error))
    );
...