inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

얄코의 반응형 프로그래밍 - 자바스크립트로 쉽게 배우는 ReactiveX

rxjs mergemap으로 pagination 하기

383

Highballs

작성한 질문수 4

0

안녕하세요! 또 궁금한게 생겨서 질문을 올립니다!

 

http request로 pagination되어 있는 데이터를 모두 가져오려고 하는데요!

 

우선 1~100페이지정도 까지 계속 데이터를 수집하다가 어느순간에 결과가 빈배열로 응답이 오면 

 

요청을 멈추도록 구현하고 싶습니다.

 

ex)
URI/1    ->  [a,b,c]   -> 10초 걸림

URI/2    ->  [d,e,f]  -> 8초 걸림

URI/3   -> []   -> 1초걸림

 

이런상황에 3번째에서 멈춘뒤 [a,b,c,d,e,f] 의 결과를 얻고 싶습니다.

 

현재는
range(1,100).pipe(
concatMap((number) => http.get(`URL/${number}`))
takewhile((value)=> value.length)
reduce((acc,cur) => acc.concat(cur), [])

이런식으로 빈배열이 응답오면 멈추는 식으로 구현되어 있습니다!

이걸 mergeMap으로 동시성을 조금 올려보고 싶은데,

mergeMap으로 하니 각 요청마다 응답에 걸리는 시간이 다른 이유 때문에(추측),

데이터가 담겨잇는 응답은 늦게 오고

데이터가 담겨 있지 않은 빈배열은 응답이 먼저 도착해서 

takewhile 조건에걸려서 종료되어 버리는 문제가 발생하고 있습니다.

pagination으로 가져온 데이터의 순서는 중요하지 않아서 종료조건만 해결하면 될것같은데,

종료조건때문에 순서를 정렬할수있는 방법을 고려해야하나 싶은데요

 

이런 문제를 해결하고 싶은데

제가 생각한대로 mergeMap의 순서를 정렬하는 방법을 강구해보는게 맞을까요?

 

더 쉽게 해결할 수 있는 방법이 있을까 해서 질문 올립니다!

함수형-프로그래밍 javascript rxjs

답변 2

1

얄팍한 코딩사전

안녕하세요, 얄코입니다.

그러한 경우, 빈 배열이 왔을 시 요청을 보내는 것은 바로 종료하되

받아온 것들을 추려서 작업을 시작하는 것은

서브젝트를 사용해서 요청을 보낸 갯수를 기록하고
그 갯수만큼 응답이 돌아와야 실행하는 식으로 문제 해결이 가능할 것 같습니다.

즉 보낸 응답은 다 받아야 일을 시작한다는거죠.


알고리즘적으로 더 좋은 방법은 시간이 된다면 저도 고민해보겠습니다.

(RxJS의 사용에 관련해서는 제가 얼마든 신속히 답변을 드리려 하는데
이를  복잡한 실무에 적용하는 프로그래밍의 영역은 저도 시간을 따로 내야 가능합니다.
이부분 양해를 부탁드립니다.)

감사합니다!

0

Highballs

엄청 빠른 답변 너무감사합니다

 

이번 답변에 적어주신 내용만으로도 

 

큰 도움이 된것같아요!!

 

너무감사합니다!

React 와 Virtual DOM 의 이야기 영상 실행이 안됩니다.

0

23

1

일반 강의와 차이점?

1

32

1

!= 연산자의 역할

0

30

1

중요하진 않지만 설명하신부분에서 안된부분..

0

28

0

강의 듣는 순서가 어떻게 되나요?

0

42

1

stopPropagation()에 대해서 질문 있습니다.

0

42

2

12.13) 하단 여백 스타일링 관련 질문 드립니다.

0

57

2

27강 Context내 RSC 사용 관련 문의

0

68

3

혹시 다음 강의 제작 예정된 것들이 있을까요?

0

64

1

Enable Linting 항목을 찾을수가 없습니다.

0

40

2

에러 질문드립니다

0

58

2

1강 질문

0

58

2

윈도우에서는동작줄이기가어디에있을까요??

0

31

1

백오피스를 개발할 때 아키텍처 구성에 대한 질문

0

46

3

ai가 만든 강의인가요?

0

109

1

VSCode 설정 문의

0

63

2

PPT 코드 관련 질문

0

46

2

subscribe를 사용했을 때 처럼~

0

283

1

온라인 IDE말고 vscode상에서 테스트코드를 작성하려면 npm 설정을 어떻게 해야하나요?

0

684

1

초당 요청횟수 제한이 있는 경우도 처리할 수 있나요?

0

937

2

pluck operator 실행 오류 문의

0

312

1

node src/main 실행이 왜 안될까요?

0

247

1

제가 rxjs에대해서 정확히 개념이 안잡혀서 그러는데..

0

453

1

defer의 사용처가 조건에 따른 옵저버블 생성이 맞나요?

0

299

1