【发布时间】:2025-11-22 06:35:01
【问题描述】:
我的项目基于 React、redux、redux-saga、es6,我尝试从这个 API 获取数据:
如您所见,此特定 API 调用显示的数据限制为每页 100 个数据,分布在 40 个页面上。
根据这个答案: http://userforum.dhsprogram.com/index.php?t=msg&th=2086&goto=9591&S=Google 它说您可以将限制扩展到每页最多 3000 个数据。
但是,在某些情况下,我会执行超出该限制的 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 将其存储在 state 中。然后发出一个新请求,将总页数作为参数发送并获取该总页数次。通过这样做,我无法弄清楚存储每次迭代数据的语法。
【问题讨论】:
-
几个问题: 1. 为什么需要保存redux store 中的总页数?您可能不想将所有数据的获取封装到一个操作中(使用多个异步获取)。 2. 您更可能的意思是“...发送起始页作为参数...”,对吧? 3.您的具体问题是什么,到目前为止您尝试过什么?遍历数组?聚合?处理多个异步调用或承诺?
-
1.在 redux 商店中存储页面总数只是对我自己的问题的一个建议,而您的建议听起来更合乎逻辑。 2. 正确。 3. 到目前为止,我所做的是使用 redux-saga 来处理异步获取。当我的组件通过调度一个动作请求数据时,我在 saga 中的观察者从上面的函数接收动作并请求数据。我收到的是来自 1 页的数据,这些数据存储在动作正文中并将其添加到我的减速器中。我的问题是我无法使用上面的函数从每个页面获取所有数据。有没有聪明的方法来做到这一点? @matthias
-
好的,我们越来越接近重点了。我从未使用过 redux-saga,也不知道这个库是否提供了专门的首选方法来解决这个问题。但我认为这不应该阻止您以典型的方式使用承诺(或异步/等待)和处理构建/映射数组和对象的函数来解决您的问题。如果我说得对,您正在寻找一种方法来对一个 API 执行多个异步调用,聚合收集到的数据,然后将其交给 store/reducer 以创建新状态。请问:您对 JavaScript 的熟悉程度如何?
-
回答你的问题,imo 在使用 javascript 做了一些项目之后,我会说我对 Javascript/ES6 基本了解。但是,我还没有接触过很多类似 ES7 的 async/await 或数据获取。这是我的项目中的第一次。
标签: javascript reactjs redux fetch-api redux-saga