为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Observable.create() 中的 setInterval() 继续运行?

为什么 Observable.create() 中的 setInterval() 继续运行?

www说 2021-08-26 17:02:34
我正在研究 rxjs Observables,但我不明白为什么 Observable.create 中的 setInterval 仍在运行,即使我已经取消订阅该 observable 对象。Observable 是异步的吗?应该什么时候停?我有这个代码供参考:var cancellableObserver = Observable.create((observer:any)=>{try {    observer.next("anyeong")    observer.next("ande")    console.log("logged once")    setInterval(()=>{        //this code block will keep running for every 2secs        observer.next("eotteokke") //but this line will stop after unsubscribe        console.log("will log every 2secs")    },2000)} catch (err) {    observer.error(err);}});var cancellableSubscription = cancellableObserver.subscribe((x:any) =>addItem(x),(err:any) =>addItem(err),() => addItem("cancellable completed"));setTimeout(() => {cancellableSubscription.unsubscribe();console.log("mary");}, 6001);
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

setInterval由 JavaScript 的运行时调度。当您取消订阅名为setIntervalno-one的 Observable 时,会告诉运行时取消计划的操作。您可能实际上希望在某些用例中保持间隔运行。


因此,您必须clearInterval在从Observable的回调返回的取消订阅时调用自己:


const source$ = new Observable(observer => {

  const handler = setInterval(...);


  ...


  return () => clearInterval(handler);

});


查看完整回答
反对 回复 2021-08-26
?
呼唤远方

TA贡献1856条经验 获得超11个赞

setInterval不依赖于您的 observable,它将继续运行,直到您使用该clearInterval()函数清除它为止。要清除间隔,您必须使用返回的intervalID(从 返回setInterval())。


例子:


// Assigning an intervalID to a variable

const intervalID = setInterval(() => {

 // Do some stuff here...

}, 2000);

// Clearing an interval

clearInterval(intervalID);


查看完整回答
反对 回复 2021-08-26
  • 2 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信