map, mergeMap

·2022년 10월 25일
0

RxJS

목록 보기
2/9
 of(1,2,3).pipe( 
      map(val=>{
        return ajax.getJSON(`https://jsonplaceholder.typicode.com/posts/${val}`);
      })
    ).subscribe(data=>{
      data.subscribe(console.log)
    })

원시값형태의 옵저버블객체에 map오퍼레이터를 사용하는데 원시값을 반환하지 않고 옵저버블객체를 반환하면 Observable<Observable< number>>의 이중구조가 된다.

이러한 옵저버블객체도 사용가능하지만 구독함수를 2번연결해야 원하는 데이터를 얻을 수 있다.


    of(1,2,3).pipe( 
      map(val=>{
        return ajax.getJSON(`https://jsonplaceholder.typicode.com/posts/${val}`);
      }),
      mergeMap(obs=>obs)
    ).subscribe(console.log)

map오퍼레이터를 사용한후 mergeMap을 사용하면 mergeMap은 Observable< number>의 옵저버블객체를 반환한다.

    of(1,2,3).pipe( 
      mergeMap(val=>{
        return ajax.getJSON(`https://jsonplaceholder.typicode.com/posts/${val}`);
      })
    ).subscribe(console.log)

mergeMap을 map대신 사용하면 된다.


    of(1,2,3,4,5).pipe(
      mergeMap(val=>{
        return ajax.getJSON(`https://jsonplaceholder.typicode.com/posts/${val}`)
      }),
    ).subscribe(console.log)

ajax로 받아온 데이터는 순서대로 방출됨을 보장하지 않는다.

    of(1,2,3,4,5).pipe(
      mergeMap(val=>{
        console.log(val);
        return ajax.getJSON(`https://jsonplaceholder.typicode.com/posts/${val}`)
      },1), // 1 mergeMap 옵션을 사용하면 순서대로 데이터를 가져온다
    ).subscribe(console.log)

0개의 댓글