如何处理RxJs超时完成-Angular HttpClient

时间:2018-11-10 01:49:32

标签: angular rxjs timeout angular2-observables angular-httpclient

如何通过超时运算符检测错误?我想仅在服务器无响应时显示警报或类似内容。

我的拦截器中有一个类似的代码:

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 :(得分:0)

这有效

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');
})

我在具有其他功能的集成商处实现了此功能,此处的代码为: https://github.com/dedd1993/ngx-admin/blob/master/src/app/core/http/http.interceptor.ts

答案 1 :(得分:-2)

您可以使用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))
    );