reactjs - 循环和更新变量而不是覆盖它,React Native
问题描述
我是 React Native 的初学者。我的程序中有一个循环,它遍历来自 API 的一些结果,对于每个结果(邮政编码),它会在地图上放置一个带有相应坐标的图钉。
const showPostcode = async() => {
{parkingPostcode && parkingPostcode.map((val, index) => {
console.log(val.postcode);
searchMultipleSpaces(val.postcode)
console.log("=============")
key={index}
})}
}
上面的函数是遍历从 API 收集的结果的循环。
如您所见,它调用了另一个函数searchMultipleSpaces(val.postcode)
。这是功能:
const searchMultipleSpaces = async(postcodee) => {
const response = await camdenParking.get("", {
params:{
postcode: postcodee
}
})
setparkingSpaces(response.data)
}
如您所见,在第二个函数中,我们设置setparkingSpaces
了 API 返回的任何内容。问题是对于每次不同的迭代,数据都将被覆盖。所以最终数据将只包含最后一次迭代的结果。我应该怎么做才能将所有迭代的每个结果都保存在那里而不会被覆盖?
这是我使用 parkSpaces 的地方:
{parkingSpaces.map((val, index) => {
return (<MapView.Marker
coordinate={{
latitude: parseFloat(val.latitude),
longitude:parseFloat(val.longitude)
}}
key={index}
解决方案
建议您将您的searchMultipleSpaces函数转换为承诺并立即调用所有函数,如下所示
我改变的是,我没有返回整个响应,而是在其中做出新的承诺,然后解析响应的数据元素
const searchMultipleSpaces = async(postcodee) => {
return new Promise((resolve,reject)=>{
camdenParking.get("", {
params:{
postcode: postcodee
}
}).then(res=>resolve(res.data)).catch(err=>reject(err))
})
}
然后 使用Promise.all()调用searchMultipleSpaces
像下面
const showPostcode = async() => {
let allPromise = [];
{parkingPostcode && parkingPostcode.map((val, index) => {
console.log(val.postcode);
allPromise.push(searchMultipleSpaces(val.postcode))
console.log("=============")
key={index}
})}
const data = await Promise.all(allPromise);
//here you get all the response at once and then send it to setparkingSpaces
setparkingSpaces(data)
}
推荐阅读
- reactjs - 反应中使用useCallback的无效钩子调用
- vba - MS Word 中的 VBA 分页符
- node.js - 如何检查我的角度项目中是否存在 node_modules 文件夹
- dialogflow-es - 默认后备意图响应 + webhook 实现
- terminal - "~/miniconda3/bin" 不会在自定义环境的 PATH 之前添加
- r - 有效地将每一行与整个数据表相乘以实现大数据量
- javascript - 将数据从一个组件检索到另一个组件
- amazon-web-services - 在 AWS 中自动阻止 DOS 攻击
- python - Docker 容器中的 Python Flask API
- reactjs - Apollo 客户端到 TypegraphQL apollo 服务器查询失败 - 400 响应