亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Angular通過?HTTP?Interceptor?實現(xiàn)?HTTP?請求超時監(jiān)控的例子

 更新時間:2022年06月17日 16:04:33   作者:JerryWang_sap  
這篇文章主要介紹了Angular?如何通過?HTTP?Interceptor?實現(xiàn)?HTTP?請求的超時監(jiān)控,本文通過例子給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

當開發(fā)人員在 Dynatrace 中查看這些請求時,將無法再看到超時后正在進行的 API 調(diào)用。 該過程在后臺進行渲染,但 Dynatrace 看到返回給客戶端的響應(yīng)并停止記錄,在這種情況下,如果能了解它正在做的事情需要這么長時間,對分析問題會更有幫助。

我們可以引入一個 Angular HTTP_INTERCEPTOR 來超時等待已久的網(wǎng)絡(luò)請求,從而確保在服務(wù)器端引導(dǎo)的應(yīng)用程序具有更短的生命周期。 換句話說:所以 SSR 渲染不會因為等待來自網(wǎng)絡(luò)的緩慢 API 響應(yīng)而 掛起。 但是,這可能需要在應(yīng)用程序代碼甚至 SSR 代碼中添加額外的邏輯,以便在 SSR 響應(yīng)中不會返回此類格式錯誤的渲染(基于不完整的數(shù)據(jù))。 在這種情況下,最好回退到?jīng)]有緩存標頭的 CSR 應(yīng)用程序,而不是允許格式錯誤的渲染 html 作為響應(yīng)發(fā)送(并且可能由 CDN 緩存)。

一個例子。

在 app.module.ts 里的代碼:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { RequestTimeoutHttpInterceptor, DEFAULT_TIMEOUT } from './interceptors';
import { AppComponent } from './app.component';

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

interceptor 的實現(xiàn):

import { Injectable, InjectionToken, Inject } from '@angular/core';
import { HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
import { empty, TimeoutError } from 'rxjs';
import { timeout, catchError } from 'rxjs/operators';
export const DEFAULT_TIMEOUT = new InjectionToken<number>('defaultTimeout');
@Injectable({
  providedIn: 'root'
})
export class RequestTimeoutHttpInterceptor implements HttpInterceptor {
  constructor(
    @Inject(DEFAULT_TIMEOUT) protected defaultTimeout: number,
  ) { }
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    const modified = req.clone({
      setHeaders: { 'X-Request-Timeout': `${this.defaultTimeout}` }
    });
    return next.handle(modified).pipe(
      timeout(this.defaultTimeout),
      catchError(err => {
        if (err instanceof TimeoutError)
          console.error('Timeout has occurred', req.url);
        return empty();
      })
    );
  }
}

這里使用了 rxjs 的 timeout 操作符。如果在指定的時間間隔之內(nèi)沒有 emit 值,則會拋出 error.

看下面這個例子:

// RxJS v6+
import { of } from 'rxjs';
import { concatMap, timeout, catchError, delay } from 'rxjs/operators';
// simulate request
function makeRequest(timeToDelay) {
  return of('Request Complete!').pipe(delay(timeToDelay));
}
of(4000, 3000, 2000)
  .pipe(
    concatMap(duration =>
      makeRequest(duration).pipe(
        timeout(2500),
        catchError(error => of(`Request timed out after: ${duration}`))
      )
    )
  )
  /*
   *  "Request timed out after: 4000"
   *  "Request timed out after: 3000"
   *  "Request Complete!"
   */
  .subscribe(val => console.log(val));

在這段代碼里,我們首先使用 delay 操作符,在 makeRequest 函數(shù)里指定了一個時間間隔,來模擬函數(shù)調(diào)用的延遲。

然后將 makeRequest 返回的 Observable,添加了一個 timeout(2500) 的操作符,意思是 2.5 秒之內(nèi),如果該 Observable 沒有發(fā)出值,即進入 CatchError 的處理邏輯內(nèi)。

數(shù)據(jù)源頭有三個值,4000,3000 和 2000,其中只有最后一個值小于 2500,因此能在超時時間間隔之內(nèi)完成函數(shù)調(diào)用。其他兩個值都會導(dǎo)致超時,從而進入 catchError 的數(shù)據(jù)打印。

到此這篇關(guān)于Angular 如何通過 HTTP Interceptor 實現(xiàn) HTTP 請求的超時監(jiān)控的文章就介紹到這了,更多相關(guān)Angular HTTP 請求超時監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • AngularJS中的DOM操作用法分析

    AngularJS中的DOM操作用法分析

    這篇文章主要介紹了AngularJS中的DOM操作,較為詳細的分析了AngularJS針對DOM操作的原理、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下
    2016-11-11
  • js常用正則表達式集錦

    js常用正則表達式集錦

    這篇文章主要介紹了js常用正則表達式集錦,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • AngularJS 異步解決實現(xiàn)方法

    AngularJS 異步解決實現(xiàn)方法

    這篇文章主要介紹了AngularJS 異步解決實現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Angular 路由route實例代碼

    Angular 路由route實例代碼

    下面小編就為大家?guī)硪黄狝ngular 路由route實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • angularJs中json數(shù)據(jù)轉(zhuǎn)換與本地存儲的實例

    angularJs中json數(shù)據(jù)轉(zhuǎn)換與本地存儲的實例

    今天小編就為大家分享一篇angularJs中json數(shù)據(jù)轉(zhuǎn)換與本地存儲的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • AngularJS內(nèi)置指令

    AngularJS內(nèi)置指令

    這篇文章主要詳細介紹了AngularJS內(nèi)置指令的使用方法,非常詳細,常用的一些指令操作都做了總結(jié),有需要的小伙伴參考下
    2015-02-02
  • Angular企業(yè)級開發(fā)——MVC之控制器詳解

    Angular企業(yè)級開發(fā)——MVC之控制器詳解

    本篇文章主要介紹了Angular企業(yè)級開發(fā)——MVC之控制器詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • AngularJS 遇到的小坑與技巧小結(jié)

    AngularJS 遇到的小坑與技巧小結(jié)

    本文主要對AngularJS 遇到的小坑與技巧進行了一個小小的總結(jié),比較使用,希望能給大家做一個參考。
    2016-06-06
  • Angular2使用Angular-CLI快速搭建工程(二)

    Angular2使用Angular-CLI快速搭建工程(二)

    這篇文章主要介紹了Angular2使用Angular-CLI快速搭建工程(二),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • AngularJS頁面訪問時出現(xiàn)頁面閃爍問題的解決

    AngularJS頁面訪問時出現(xiàn)頁面閃爍問題的解決

    這篇文章主要介紹了AngularJS框架使用中出現(xiàn)頁面閃爍問題的解決方法,閃爍問題一般是初始化未加載完畢造成的,需要的朋友可以參考下
    2016-03-03

最新評論