取消rxjs中的http订阅

时间:2017-06-19 12:45:18

标签: angular rxjs

在我的角度应用程序中,我希望能够取消和使用Rxjs进行的http请求。场景:

<span>

我有一个导航到另一条路线的取消按钮。我想取消待处理的http请求,但这种方式无法正常工作。我想做一些更清楚的事情然后调用取消订阅我的所有http请求订阅

2 个答案:

答案 0 :(得分:2)

一般来说,有两种方法可以做到这一点。

  1. 手动取消订阅

    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()

  2. 使用Subject的实例来完成源Observable

    private subject = new Subject();
    
    onSave() { 
        this.sub.add(this.service.save(this.formValue).takeUntil(subject).subscribe());
    }
    
    ngOnDestroy() { 
        this.subject.next();
    }
    
  3. 顺便说一下,这是一个非常类似的问题: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();
}

这应该可以解决问题:)