React native 我的设置状态在假定运行之前正在运行

React native 我的设置状态在假定运行之前正在运行,react-native,asyncstorage,React Native,Asyncstorage,我使用的是react native,我使用的是javascript编码,我使用的是实际的硬件,而不是模拟器 我试图使用AsyncStorage中的数据设置tempGroups,然后将我的组状态设置为该值。但是,它会将组设置为空数组,然后用数据填充数组。我该如何解决这个问题 const LoadData = async () => { let tempGroups = []; console.log("start: " + tempGroups.lengt

我使用的是react native,我使用的是javascript编码,我使用的是实际的硬件,而不是模拟器

我试图使用AsyncStorage中的数据设置tempGroups,然后将我的组状态设置为该值。但是,它会将组设置为空数组,然后用数据填充数组。我该如何解决这个问题

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};
}));