簡體   English   中英

RxJs:如何關閉嵌套 observable.subscribe 調用的訂閱

[英]RxJs : How to close subscription of nested observable.subscribe call

在我的 Angular 應用程序中:

我有這樣的治療:

mySubjectOne = new Subject();

methodOne(){
    this.subscriptionOne = mySubjectOne.subscribe((response) => {
      this.methodTwo();
    })
}

methodTwo(){
  this.subscriptionTwo = return this.httpClient.post(myurl , mydata).subscribe((response) => {
      myTreatment(); // MY TREATMENT
  })
}

我的問題是每當“ mySubjectOne ”被稱為methodOne調用methodTwo 時

並且 subscriptionTwo 似乎每次都被克隆為 +1

比如第三次調用:methodOne,好像調用了4個subscriptionTwo

我如何在 TREATMENT 之后關閉 subsrciption subscriptionTwo 並讓它在每個 rime 中重新創建

建議?

您可以使用switchMap來實現這種行為。 請注意,還有其他運算符,例如exhaustMapmergeMap ,它們可能更適合您想要的行為。 閱讀提供的來源。

mySubjectOne = new Subject();

methodOne() {
  this.subscriptionOne = mySubjectOne.pipe(
    switchMap((response) => this.methodTwo()),
  )
    .subscribe((response) => {
      myTreatment();
  });
}

methodTwo() {
  this.subscriptionTwo = return this.httpClient.post(myurl , mydata);
}

現在每當mySubjectOne觸發時, methodTwo將被執行。 完成后, myTreatment將運行。

請注意,您應該只運行一次methodOne (以初始化訂閱),否則訂閱可能會運行多次。 所以我建議將初始化過程移到你的構造函數或者ngOnInit

我認為在訂閱中訂閱是個壞主意。 你最好使用SwitchMap來處理它。

如果您更喜歡走自己的路,您可以使用TakeUntil發出訂閱的結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM