상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - switchMap을 사용하여 외부 라이브러리와 통합하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap은 RxJS에서 제공하는 연산자로, 이전 Observable이 방출한 값에 대해 새로운 Observable을 생성하고 구독하는 과정에서, 이전 Observable이 아직 완료되지 않았더라도 새로운 Observable이 발행되면 이전 Observable 구독을 자동으로 취소(switch)해주는 특징이 있습니다. 이 특성 덕분에 외부 라이브러리와 통합할 때 특히 유용하게 활용할 수 있습니다. 외부 라이브러리와 연동할 때 switchMap을 사용하는 일반적인 시나리오는 다음과 같습니다: 1. 외부 라이브러리가 <a href='https://sangseek.com/sangseeks/콜백/ko'>콜백</a> 또는 프로미스 기반 비동기 API를 가진 경우 보통 외부 라이브러리 함수들은 비동기 작업을 수행하지만, RxJS Observable을 직접 반환하지 않습니다. 이럴 때, switchMap을 사용하여 사용자의 이벤트나 내부 Observable에서 방출된 값을 받아 외부 라이브러리 호출을 Observable로 변환할 수 있습니다. 2. 특정 이벤트가 연속해서 발생할 때 이전 비동기 작업을 취소하고 새로운 작업만 처리할 필요가 있는 경우 예를 들어 <a href='https://sangseek.com/sangseeks/검색어 입력/ko'>검색어 입력</a>이 변경될 때마다 API 호출(외부 라이브러리 함수 호출)을 해야 한다면, 이전 호출 취소가 쉽지 않은 상황에서 switchMap이 큰 도움이 됩니다. 구체적인 사용 방법 - 외부 라이브러리 함수가 Promise 를 반환한다면, `from()` 연산자를 활용하여 Promise를 Observable로 변환할 수 있습니다. - 외부 라이브러리 함수가 콜백 기반 비동기 함수라면 `bindCallback` 또는 `bindNodeCallback`을 이용해 Observable로 래핑할 수 있습니다. - 그 후, 내부 Observable (예: 사용자 이벤트, 폼 입력 등의 Observable)에서 switchMap으로 외부 라이브러리의 Observable 호출을 연결하면 됩니다. 예시 1: Promise 반환 함수와 switchMap 통합하기 ```typescript import { fromEvent } from 'rxjs'; import { debounceTime, switchMap } from 'rxjs/operators'; // 외부 라이브러리의 Promise 반환 함수 예시 function fetchUserData(userId: string): Promise<UserData> { return fetch(`https://api.example.com/users/${userId}`) .then(response => response.json()); } const inputElement = document.getElementById('userIdInput'); fromEvent(inputElement, 'input').pipe( debounceTime(300), // 짧은 시간 동안 입력 멈춤 대기 switchMap((event: any) => { const userId = event.target.value; // Promise를 Observable로 변환해서 switchMap 내부에서 반환 return from(fetchUserData(userId)); }) ).subscribe(userData => { console.log('User data:', userData); }); ``` - `fromEvent`로 DOM 이벤트를 Observable로 감싼 뒤 switchMap 내부에서 Promise 기반 외부 함수 호출을 Observable로 변환. - 입력 값 변경이 빠르게 연속 발생해도 이전의 fetchUserData 호출은 취소되고, 가장 마지막 호출 결과만 처리됨. 예시 2: 콜백 기반 외부 라이브러리 사용 시 ```typescript import { fromEvent, bindCallback } from 'rxjs'; import { switchMap } from 'rxjs/operators'; // 콜백 기반 함수 예: Node.js 스타일 callback(err, result) function getData(id: string, callback: (error: any, data?: any) => void) { // 외부 비동기 라이브러리 호출 가정 externalLib.getDataById(id, callback); } const getDataObservable = bindCallback(getData); fromEvent(document.getElementById('inputId'), 'input').pipe( switchMap((event: any) => { const id = event.target.value; return getDataObservable(id); // Observable 반환 }) ).subscribe(data => { console.log('Data:', data); }); ``` - `bindCallback`가 콜백 기반 외부 함수를 Observable로 감싸준다. - 이후 switchMap 내부에서 이 Observable을 반환하여 쉽게 스트림과 연결 가능. --- 핵심 요약 - 외부 라이브러리의 비동기 함수(Promise/콜백)를 Observable로 변환하는 래핑 작업이 선행되어야 한다. - switchMap 내부에서 외부 라이브러리 호출을 Observable로 감싸서 반환한다. - 이렇게 하면 이벤트 스트림 등에서 발생하는 연속 호출 처리 시, 이전 호출을 자동 종료(취소)하고 최신 호출만 처리하는 효과를 누릴 수 있다. - RxJS의 다양한 변환 연산자(from, bindCallback, defer 등)을 적절히 활용해 통합한다. 결국 switchMap과 외부 라이브러리 연동은 “비동기 처리 결과를 Observable로 래핑하고, 이벤트/스트림에서 쉽게 조합한다”는 점을 이해하는 것이 가장 중요하며, 따라서 기존의 콜백/Promise 라이브러리 코드를 Rx 방식으로 변환하는 게 핵심입니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기