在我的角度应用程序中,我希望能够取消和使用Rxjs进行的http请求。场景:
<span>
我有一个导航到另一条路线的取消按钮。我想取消待处理的http请求,但这种方式无法正常工作。我想做一些更清楚的事情然后调用取消订阅我的所有http请求订阅
答案 0 :(得分:2)
一般来说,有两种方法可以做到这一点。
手动取消订阅
onSave() {
this.sub = this.service.save(this.formValue).subscribe();
}
ngOnDestroy() {
this.sub.unsubscribe();
}
您还可以创建一个Subscription
类的实例,然后只需添加处理程序:
private sub = new Subscription();
onSave() {
this.sub.add(this.service.save(this.formValue).subscribe());
}
ngOnDestroy() {
this.sub.unsubscribe();
}
这样您就不需要多次订阅,并在所有订阅上手动调用unsubscribe()
。
使用Subject
的实例来完成源Observable
private subject = new Subject();
onSave() {
this.sub.add(this.service.save(this.formValue).takeUntil(subject).subscribe());
}
ngOnDestroy() {
this.subject.next();
}
顺便说一下,这是一个非常类似的问题:RxJS: takeUntil() Angular component's ngOnDestroy()
答案 1 :(得分:1)
要取消订阅,您需要保留对它的引用。
onSave() {
this.saveSubscription = this.service.save(this.formValue).takeWhile(() => this.isComponentAlive).subscribe();
}
ngOnDestroy() {
this.isComponentAlive = false;
this.saveSubscription.unsubscribe();
}
这应该可以解决问题:)