2021-01-22

app.ts

//our root app component
import {Component, Inject, Injectable, InjectionToken, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {HttpClientModule, HttpHeaders, HttpClient, HTTP_INTERCEPTORS, HttpInterceptor, HttpRequest, HttpHandler} from '@angular/common/http'

import { Observable } from 'rxjs/Observable';
import { TimeoutError } from 'rxjs/util/TimeoutError';
import 'rxjs/add/operator/timeout';

const DEFAULT_TIMEOUT = new InjectionToken<number>('defaultTimeout');
const defaultTimeout = 10000;

@Injectable()
export class TimeoutInterceptor implements HttpInterceptor {
  constructor(@Inject(DEFAULT_TIMEOUT) protected defaultTimeout) {}
  
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const timeout = Number(req.headers.get('timeout')) || this.defaultTimeout;
    req.headers = req.headers.delete('timeout');
    return next.handle(req).timeout(timeout);
  }
}

@Component({
  selector: 'my-app',
  template: ``,
})
export class App {
  name:string;
  constructor(http: HttpClient) {
    http.get('test.json', { headers: new HttpHeaders({ timeout: `${10}` }) })
    .subscribe(null, err => {
      console.log('custom short timeout, err instanceof TimeoutError is %s', err instanceof TimeoutError)
    });

    http.get('test.json', { headers: new HttpHeaders({ timeout: `${20000}` }) })
    .subscribe(console.log('custom long timeout'));

    http.get('test.json')
    .subscribe(console.log('default timeout'));

  }
}

@NgModule({
  imports: [ BrowserModule, HttpClientModule ],
  providers: [
    [{ provide: HTTP_INTERCEPTORS, useClass: TimeoutInterceptor, multi: true }],
    [{ provide: DEFAULT_TIMEOUT, useValue: defaultTimeout }]
  ],  
  declarations: [ App ],
  bootstrap: [ App ]
})
export class AppModule {}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值