取消HTTP请求

时间:2018-08-02 18:13:35

标签: angular typescript http get httprequest

我想知道是否可以通过某种方法检查HTTP get是否处于挂起状态以及是否可以取消HTTP get?

这是我的HTTP获取:

public getData(): Observable<any> {
   return this.httpClient.get('http://IP_ADRESS:3490/testStream', {responseType: 'arraybuffer', observe: 'response' }});
}

public putData(): void {
   this.getData().subscribe((resp) => {
     console.log(resp);
     const responseArray: Uint8ClampedArray = new Uint8ClampedArray(resp);
     const newTabTemp: Uint8ClampedArray = new Uint8ClampedArray(this.maxHeight * this.maxWidth * 4);
     let comp = 0;
     for (let i = 0; i < this.maxHeight * this.maxWidth * 4; i = i + 4) {
       newTabTemp[i] = responseArray[comp];
       newTabTemp[i + 1] = responseArray[comp];
       newTabTemp[i + 2] = responseArray[comp];
       newTabTemp[i + 3] = 255;
       comp = comp + 1;
     }
     let nouvData: ImageData;
     nouvData = new ImageData(newTabTemp, this.maxWidth, this.maxHeight);
     this.contextVideo.putImageData(nouvData, BORDERX / 2, BORDERY / 2);
   });
}

Request taking to much time Request never suceeding

我收到了很多这些未决请求,这些请求永远不会成功或需要很长时间。如何检查它们是否正在等待中并取消它们?

3 个答案:

答案 0 :(得分:0)

取消订阅可观察项具有相同的取消效果。在下面的示例中,http请求将在2秒内取消。您可以查看完整的示例here

search() {
const request = this.searchService.search(this.searchField.value)
  .subscribe(
    result => { this.result = result.artists.items; },
    err => { this.errorMessage = err.message; },
    () => { console.log('Completed'); }
  );

setTimeout(() => request.unsubscribe(), 2000);

}

答案 1 :(得分:0)

在Angular 2+中,如果您在观察到的请求上调用取消订阅,则请求将中止。 subscription.unsubscribe()的自然行为是不会中止请求,但是angular 2家伙已经在angular / http包中添加了此特定功能。请参阅this Angular github存储库。

在正常情况下(不使用angular / http时),如果要在退订时中止请求,则可以利用以下代码-

public getMultipleTeamsData(teamIds:Array<string>,dateRange:any): Observable<any[]>{
    let requests = [];
    teamIds.forEach(teamId => {
      requests.push(this.getTeamDetails(teamId, dateRange))
    });
    return Observable.forkJoin(...requests);
}

答案 2 :(得分:0)

取消HTTP请求是常见的要求。例如,您可能有一个请求队列,其中新请求取代了待处理请求,而该待处理请求需要取消。 登录以发表评论

要取消请求,我们调用其订阅的取消订阅功能

 @Component({ /* ... */ })
    export class AppComponent {
      /* ... */

      search() {
        const request = this.searchService.search(this.searchField.value)
          .subscribe(
            result => { this.result = result.artists.items; },
            err => { this.errorMessage = err.message; },
            () => { console.log('Completed'); }
          );

        request.unsubscribe();
      }
    }

礼貌:Cancel http request