首页 > 解决方案 > Angular:取消订阅http请求

问题描述

我有一组上传大文件的 http 请求。

const requests = []

requests.push(HttpClient.post())
requests.push(HttpClient.post())
requests.push(HttpClient.post())

concat(...requests).subscribe()

我想取消一个文件上传请求例如,我想取消第二个文件上传请求。我怎样才能做到这一点?

我在这里使用 concat 是因为,请求应该一个接一个地完成,即按顺序完成。

标签: angularrxjsobservable

解决方案


您可以通过管道传输结果请求,例如:

@Injectable()
class MyService {
    private unsubscribe$ = new Subject<void>();

    constructor(private http: HttpClient) {}

    public doRequests() {
        const requests = []

        requests.push(this.http.post())
        requests.push(this.http.post())
        requests.push(this.http.post())

        return concat(...requests).pipe(takeUntil(this.unsubscribe$)).subscribe()
    }

    public cancelRequests() {
        this.unsubscribe$.next();
    }
}

推荐阅读