inflearn logo
강의

講義

知識共有

ヤルコのレスポンシブプログラミング - JavaScriptで簡単に学ぶReactiveX

rxjs mergemap으로 pagination 하기

374

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

yalco

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

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

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

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

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


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

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

감사합니다!

0

Highballs

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

 

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

 

큰 도움이 된것같아요!!

 

너무감사합니다!

3강 질문

0

18

1

74. 데이터 캐시 - 1 (이론) 강의 영상 누락

0

26

1

2강 nodejs 3단계 설명 질문

0

33

1

imagesLoaded에 관한 질문

0

19

2

useEffect와 lifecycle문의

0

26

2

프론트엔드 학습 수준 문의

0

37

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

48

2

최근 코테, 과제 테스트 트렌드

0

68

2

lucide react 아이콘 설치

0

46

2

17강 zustand store 서버에서 생성

1

36

1

문의관련 문의

0

44

2

next.js 를 2대이상 실행하는 경우 제공하는 cache 기능들은 어떻게 되나요?

0

55

2

76. 전문성 더하기: 놓치면 아쉬운 관련 기술들 수업 자료가 없어요.

0

48

2

ai 도구 질문

0

31

1

저는 왜 콘솔에서 props가 한 줄만 찍히나요?

0

47

1

렌더링 차단 리소스 javascript 실행에 관련해서 질문 있습니다.

0

48

2

데이터 로딩중 화면만 계속 나와요!!

0

54

2

subscribe를 사용했을 때 처럼~

0

279

1

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

0

677

1

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

0

932

2

pluck operator 실행 오류 문의

0

309

1

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

0

246

1

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

0

442

1

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

0

291

1