Angular:取消订阅http请求



我有一个http请求数组,用于上传大文件。

const requests = []
requests.push(HttpClient.post())
requests.push(HttpClient.post())
requests.push(HttpClient.post())
concat(...requests).subscribe()

我想取消一个文件上传请求例如,我想取消第二个文件上传请求。我该怎么做呢?

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

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

@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();
}
}

您可以创建一个主题,该主题发出要取消的请求的索引。那么它可能看起来像这样:

const cancel$ = new Subject<number>();
const requests = Array.from(Array(3).keys()).map(
(_,i) => HttpClient.post().pipe(
takeUntil(cancel$.pipe(
filter(v => v === i)
))
)
);
concat(...requests).subscribe();
// cancel the second request.
cancel$.next(1);

最新更新