当我尝试访问异步方法返回的值时,为什么会得到未定义的输出

问题描述

我有以下方法,该方法将在一个名为localStorage的文件中返回一个具有3个字段的对象:

    const getUserProfileData = async () => {
    try {
        await AsyncStorage.getItem(CONSTANTS.USER_PROFILE).then((item) => {
        let retrievedProfile = JSON.parse(item);
        return retrievedProfile;
        });
    } catch (e) {
        throw e;
    }
    };

这是我的文件profile.js:

  useEffect(() => {
    const retrieveProfileData = async () => {
      let retProfile = await localStorage.getUserProfileData();
      console.log("check what:  ",retProfile);
    };
    retrieveProfileData();
  },[]);

在使用效果中,当我尝试注销结果时,得到以下输出

check what:   undefined

我已经阅读过其他论坛,讨论与此类似的问题,但是我似乎不知道我要去哪里错了?

解决方法

    const getUserProfileData = async () => {
        return AsyncStorage.getItem(CONSTANTS.USER_PROFILE);
    };

    useEffect(() => {
    const retrieveProfileData = async () => {
        try {
        let retProfile = JSON.parse(await localStorage.getUserProfileData());
        console.log("check what:  ",retProfile);
        } catch (error) {
            // handle error
        }
    };
    retrieveProfileData();
    },[]);
,

我认为这与您混合使用async.then()有关。尝试这种方式:

const getUserProfileData = async () => {
    try {
        const result = await AsyncStorage.getItem(CONSTANTS.USER_PROFILE)
        const retrievedProfile = JSON.parse(result);
        return retrievedProfile;
    } catch (e) {
        throw e;
    }
};