iif가 흔히들 생각하는 conditional statement라고 생각했는데 아니다.
아래 예에서 언뜻 생각하기에는 input is arrived in 출력이 하나만 찍힐 것 같은데, 두 개가 찍힌다.
iif는 조건문의 실행이 아니라, 리턴된 두 개의 stream 중 subscription만을 할 거냐 말거냐를 결정하는 거다.
즉, "input is arrived in #1", "input is arrived in #2" 둘 다 찍히게 된다.
import { of, pipe, iif } from 'rxjs';
import { mergeMap } from 'rxjs/operators';
const source$ = of('Input');
const one$ = (x) => {console.log(`${x} is arrived in #1`); return of('One')};
const two$ = (x) => {console.log(`${x} is arrived in #2`); return of('Two')};
source$.pipe(
mergeMap(v =>
iif(
() => v === 'Input',
one$(v),
two$(v)
))
).subscribe( x => console.log('Output is ' + x ));
WRITTEN BY
- HanDDol
여행이란 건 말이지. 첫 걸음을 내딜 때는 모든 게 낯설고.. 그리고 점점 더 낯선 세상에 익숙해지면서 세상의 모든 곳이 고향처럼 느껴진다. 고향으로 돌아오는 여행의 마지막 걸음에는 나의 고향이 더 이상 익숙한 곳이 아닌 낯선 곳임을 알게 된다.
,