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

Ron*_*ano 2 javascript node.js rxjs typescript

我正在研究 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);
Run Code Online (Sandbox Code Playgroud)

mar*_*tin 5

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

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

const source$ = new Observable(observer => {
  const handler = setInterval(...);

  ...

  return () => clearInterval(handler);
});
Run Code Online (Sandbox Code Playgroud)