如何在Angular 2中取消HTTPRequest?
我知道如何拒绝请求承诺。
return new Promise((resolve, reject) => {
this.currentLoading.set(url, {resolve, reject});
this.http.get(url, {headers: reqHeaders})
.subscribe(
(res) => {
res = res.json();
this.currentLoading.delete(url);
this.cache.set(url, res);
resolve(res);
}
);
});
答案 0 :(得分:52)
您可以致电unsubscribe
let sub = this.http.get(url, {headers: reqHeaders})
.subscribe(
(res) => {
res = res.json();
this.currentLoading.delete(url);
this.cache.set(url, res);
resolve(res);
}
);
sub.unsubscribe();
此处有更多信息:http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http
答案 1 :(得分:40)
您可以使用以下简单的解决方案。
if ( this.subscription ) {
this.subscription.unsubscribe();
}
this.subscription = this.http.get( 'awesomeApi' )
.subscribe((res)=> {
// your awesome code..
})
答案 2 :(得分:6)
派对有点晚了,但这是我的看法:
NSError *errorJSON = nil;
NSDictionary *myJSON = [NSJSONSerialization JSONObjectWithData:data options:0 error:&errorJSON];
if (errorJSON)
{
NSLog(@"Oops error JSON: %@", errorJSON);
}
NSDictionary *data = myJSON[@"data"];
NSArray *journalList = data[@"journalList"]
for (NSDictionary *aJournalDict in journalList)
{
NSUInteger amount = [aJournalDict[@"journal_amount"] integerValue];
NSString *code = aJournalDict[@"journal_code"];
}
这允许您手动取消请求。我有时会得到一个可观察或承诺,它会对页面上的结果进行更改。如果请求是自动启动的(用户没有在x millis的字段中输入任何内容)能够中止请求很好(用户突然再次输入内容)......
takeUntil也应该使用简单的超时(Observable.timer),如果你正在找的那个 https://www.learnrxjs.io/operators/filtering/takeuntil.html
答案 3 :(得分:5)
您可以在observable上使用SwitchMap,它将取消之前请求的任何响应并仅请求最新请求:
https://www.learnrxjs.io/operators/transformation/switchmap.html
答案 4 :(得分:0)
使用switchMap
[docs],这将取消所有进行中的请求并仅使用最新的请求。
get(endpoint: string): Observable<any> {
const headers: Observable<{url: string, headers: HttpHeaders}> = this.getConfig();
return headers.pipe(
switchMap(obj => this.http.get(`${obj.url}${endpoint}`, { headers: obj.headers, params: params }) ),
shareReplay(1)
);
}
shareReplay将为任何较晚的订阅者发出最新的值。