내 프로젝트를 기반으로 반작용, REDUX REDUX - 사가, ES6 나는이 API에서 데이터를 가져 오기 위해 시도 :여러 페이지에 걸쳐 데이터를 가져 오는 방법은 무엇입니까?
당신이 볼 수 있듯이,이 특정 API 호출의 한계와 데이터를 보여줍니다 페이지 당 100 개의 데이터가 40 페이지에 분산됩니다.
대답에 따르면 : http://userforum.dhsprogram.com/index.php?t=msg&th=2086&goto=9591&S=Google 페이지 당 최대 3000data까지 한도를 확장 할 수 있습니다.
그러나 어떤 경우에는 내가 내 모든 데이터를 다음과 같이 그 일을받지 못할 것입니다 의미 제한을 초과하는 API를 호출 할 것이다 :
이export function fetchMetaData(countryCode: string, surveyYears: string) {
return (fetch('http://api.dhsprogram.com/rest/dhs/data/' + countryCode + ',' + surveyYears + '?returnFields=CharacteristicLabel,Indicator,IndicatorId,Value&f=json')
.then(response => response.json())
.then(json => json.Data.map(survey => survey)))
}
그래서 제 질문은이다; 전체 데이터 페이지를 알고 있다면이 API의 모든 데이터를 가져 오는 가장 좋은 방법은 무엇입니까? 포럼 링크의 대답은 API를 반복하는 것이 좋습니다. 그러나이 작업을 수행하는 데 올바른 구문 사용법을 찾을 수 없습니다.
내 아이디어는 총 페이지 수를 얻기 위해 하나의 API 호출을 수행하는 것입니다. 그런 다음 이것을 redux + redux-saga를 사용하여 상태로 저장하십시오. 그런 다음 총 요청을 매개 변수로 보내고 총 총 페이지 수를 가져 오는 새로운 요청을하십시오. 그리고 이렇게함으로써 각 반복마다 데이터를 저장하는 구문을 이해할 수 없습니다.
몇 가지 질문 : 1. 왜 redux 저장소에 총 페이지 수를 저장해야합니까? 모든 데이터를 하나의 액션으로 인출하는 것을 캡슐화하지 않을 것입니다 (여러 개의 비동기 페치 사용). 2. 당신은 "... 시작 페이지를 매개 변수로 보내는 것"을 의미했을 것입니다, 그렇습니까? 3. 당신의 문제는 무엇입니까? 지금까지 무엇을 시도 했습니까? 배열을 반복할까요? 집계 하시겠습니까? 여러 비동기 호출 또는 약속 처리? – matthias
1. redux 상점에 총 페이지 수를 저장하는 것은 제 자신의 문제에 대한 제안이었으며 제안한 내용은 더 논리적으로 들립니다. 2. 정정하십시오. 3. 지금까지 내가 수행 한 작업은 redux-saga를 사용하여 비동기 페치를 처리하는 것입니다. 내 구성 요소가 작업을 파견하여 데이터를 요청하면 사가의 내 관찰자가 작업을 수신하고 위 기능에서 데이터를 요청합니다. 내가받는 것은 1 페이지의 데이터를 액션 본문에 저장하고 내 감속기에 추가하는 것입니다. 내 문제는 위의 함수를 사용하여 모든 페이지에서 모든 데이터를 가져올 수 없다는 것입니다. 이것을 할 수있는 현명한 방법이 있습니까? @matthias –
좋아, 우리는 요점에 더 가까워지고있다. 나는 redux-saga를 사용한 적이 없으며이 lib가이 문제를 해결하기 위해 헌신적이고 선호하는 방법을 제공하는지 알지 못합니다. 그러나 이것이 약속이나 비동기/기다림과 배열과 객체를 구축/매핑하는 기능을 사용하는 일반적인 방법으로 문제를 해결하는 데있어 당신을 멈추지 않아야한다고 생각하지 않습니다. 내가 맞으면 하나의 API에 대한 여러 비동기 호출을 실행하고 수집 된 데이터를 집계 한 다음 저장소를 가져 와서 새로운 상태를 만들 수있는 방법을 찾고 있습니다. 5 가지 질문을 드리겠습니다. 일반적으로 자바 스크립트에 얼마나 익숙합니까? – matthias