猿问

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

我正在研究 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);


www说
浏览 229回答 2
2回答

杨__羊羊

setInterval由 JavaScript 的运行时调度。当您取消订阅名为setIntervalno-one的 Observable 时,会告诉运行时取消计划的操作。您可能实际上希望在某些用例中保持间隔运行。因此,您必须clearInterval在从Observable的回调返回的取消订阅时调用自己:const source$ = new Observable(observer => {  const handler = setInterval(...);  ...  return () => clearInterval(handler);});

呼唤远方

setInterval不依赖于您的 observable,它将继续运行,直到您使用该clearInterval()函数清除它为止。要清除间隔,您必须使用返回的intervalID(从 返回setInterval())。例子:// Assigning an intervalID to a variableconst intervalID = setInterval(() => { // Do some stuff here...}, 2000);// Clearing an intervalclearInterval(intervalID);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答