React native 我的设置状态在假定运行之前正在运行
我使用的是react native,我使用的是javascript编码,我使用的是实际的硬件,而不是模拟器 我试图使用AsyncStorage中的数据设置tempGroups,然后将我的组状态设置为该值。但是,它会将组设置为空数组,然后用数据填充数组。我该如何解决这个问题React native 我的设置状态在假定运行之前正在运行,react-native,asyncstorage,React Native,Asyncstorage,我使用的是react native,我使用的是javascript编码,我使用的是实际的硬件,而不是模拟器 我试图使用AsyncStorage中的数据设置tempGroups,然后将我的组状态设置为该值。但是,它会将组设置为空数组,然后用数据填充数组。我该如何解决这个问题 const LoadData = async () => { let tempGroups = []; console.log("start: " + tempGroups.lengt
const LoadData = async () => {
let tempGroups = [];
console.log("start: " + tempGroups.length);
try {
var keys = await AsyncStorage.getAllKeys();
keys.forEach(async (element) => {
var data = JSON.parse(await AsyncStorage.getItem(element));
tempGroups.push({ key: element, name: data.name, tasks: data.tasks });
console.log("inside: " + tempGroups.length);
});
} catch (e) {
alert("There was an issue loading local data :c");
}
console.log("outside: " + tempGroups.length);
SetGroups(tempGroups);
};
这是console.log的输出:
start: 0
outside: 0
inside: 1
inside: 2
我已经尝试过的事情:
- Changing let to var, it doesn't fix it.
- Adding an await to the push, I get a warning saying it won't do anything.
- Directly setting the Group 'SetGroup([{ key: element, name: data.name, tasks: data.tasks },...Group]);', this causes duplicate data to appear
您不能将
async
与forEach
一起使用。它不会等待承诺的解决。您需要使用映射
和承诺。所有
:
tempGroups=wait Promise.all(key.map)(异步(元素)=>{
const data=JSON.parse(等待AsyncStorage.getItem(元素));
返回{key:element,name:data.name,tasks:data.tasks};
}));