더북(TheBook)

예제 3-2는 기본 Promise까지 처리할 것으로 생각하고 옵저버블을 해제합니다. 그리고 예제에서 확인할 수 있듯이 옵저버블 객체 자체는 적절히 해제되었습니다. 이벤트를 명시적으로 취소하려고 시도했지만, 10초 뒤에 프로그램은 다음을 방출합니다(자바스크립트의 Promise는 결국 중단될 수 없습니다).

"In then(): 42"

어떤 일이 벌어진 걸까요? 그림 3-3에서 설명해 보겠습니다.

▲ 그림 3-3 옵저버블이 취소되어도 기본 Promise에는 영향을 미치지 않는다.

 

Promise는 취소할 수 있게 디자인되지 않았습니다. Promise 객체가 실행되면(보류 상태가 됨) 경우에 따라 성공하든 실패하든 기본 결과를 완수하려 노력합니다.

RxJS는 외부 API와 쉽게 통합할 수 있지만, 단일 값(Promise)을 방출하도록 디자인된 API와 무한 값(옵저버블)을 지원하는 API 간에 디자인 철학이 일치하지 않음을 명심해야 합니다. 이는 하나의 사례지만 RxJS를 지원하지 않는 API와 통합하려는 경우에도 발생할 수 있습니다. 그러나 대부분의 경우 많은 RxJS 연산자가 구독 취소 작업을 직접 수행하므로 구독 취소에 대해 걱정할 필요는 없습니다.

지금까지 스트림의 생성과 취소를 살펴보았습니다. 다음 절에서는 RxJS 프로그램에서 필수인 연산자를 다루어보겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.