구독취소는 스트림에서 방출하지 않게한다.
subscription = interval(1000).subscribe(console.log);
subscription.unsubscribe();
const stream$ = new Observable<number>(observer=>{
let count=0;
let stopSetInterval = setInterval(()=>{
console.log('streaming');
observer.next(count++);
},1000);
return ()=>{
console.log('call unsubscribe');
clearInterval(stopSetInterval);
}
});
setInterval함수와 observer.next(count++)를 내부에서 작동시키면 unsubscribe했을때 방출함수는 중지되지만 setInterval는 독립적으로 실행되는 함수이므로 반드시 clearInterval로 취소해야 한다.
이러한 경우를 위해서 RxJS는 방출함수에서 래퍼함수를 리턴하면 unsubscribe했을때 자동으로 실행되도록 해놓았다.
위와같이 리턴되는 함수에 clearInterval하면 메모리누수가 없다.