我想知道是否可以通过某种方法检查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);
});
}
我收到了很多这些未决请求,这些请求永远不会成功或需要很长时间。如何检查它们是否正在等待中并取消它们?
答案 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();
}
}