예제 3-2는 기본 Promise
까지 처리할 것으로 생각하고 옵저버블을 해제합니다. 그리고 예제에서 확인할 수 있듯이 옵저버블 객체 자체는 적절히 해제되었습니다. 이벤트를 명시적으로 취소하려고 시도했지만, 10초 뒤에 프로그램은 다음을 방출합니다(자바스크립트의 Promise
는 결국 중단될 수 없습니다).
"In then(): 42"
어떤 일이 벌어진 걸까요? 그림 3-3에서 설명해 보겠습니다.
▲ 그림 3-3 옵저버블이 취소되어도 기본 Promise에는 영향을 미치지 않는다.
Promise
는 취소할 수 있게 디자인되지 않았습니다. Promise
객체가 실행되면(보류 상태가 됨) 경우에 따라 성공하든 실패하든 기본 결과를 완수하려 노력합니다.
RxJS는 외부 API와 쉽게 통합할 수 있지만, 단일 값(Promise
)을 방출하도록 디자인된 API와 무한 값(옵저버블)을 지원하는 API 간에 디자인 철학이 일치하지 않음을 명심해야 합니다. 이는 하나의 사례지만 RxJS를 지원하지 않는 API와 통합하려는 경우에도 발생할 수 있습니다. 그러나 대부분의 경우 많은 RxJS 연산자가 구독 취소 작업을 직접 수행하므로 구독 취소에 대해 걱정할 필요는 없습니다.
지금까지 스트림의 생성과 취소를 살펴보았습니다. 다음 절에서는 RxJS 프로그램에서 필수인 연산자를 다루어보겠습니다.