AsyncStorage returns 检索项目时承诺

AsyncStorage returns Promise when retrieving item

说明

我正在尝试使用 AsyncStorage 以便在登录期间保存令牌。在用户按下登录按钮后,从我的后端收到令牌作为响应。成功登录后,屏幕会转到 ProfileScreen,我会在其中尝试检索已保存的令牌。

问题

当我尝试在 ProfileScreen 中检索项目并在控制台记录它时,我似乎得到了一个充满其他对象的 Promise 对象,并且在其中我可以看到我的值。我如何获得价值? (或者我应该说我如何履行诺言:))

代码

Utilities/AsyncStorage.js(这里我有存储和检索项目的辅助函数)

const keys = {
jwtKey: 'jwtKey'
}

const storeItem = async (key, item) => {
  try {
    var jsonOfItem = await AsyncStorage.setItem(key, JSON.stringify(item));
    console.log('Item Stored !');
    return jsonOfItem;
  } catch (error) {
    console.log(error.message);
  }
};

const retrieveItem = async key => {
  try {
    const retrievedItem = await AsyncStorage.getItem(key);
    const item = JSON.parse(retrievedItem);
    console.log('Item Retrieved !');
    return item;
  } catch (error) {
    console.log(error.message);
  }
  return;
};

LoginScreen.js(这里,按下登录按钮后,我从后端收到了带有令牌的响应)

const LoginScreen = ({componentId}) => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const loginPressed = async () => {
    await axios
      .post('localhost', {
        email,
        password,
      })
      .then(function(res) {
        console.log(res);
        storeItem(keys.jwtKey, res.data.token);
        push(componentID, views.profileScreen());
      })
      .catch(function(error) {
        console.log(error);
      });
  };

ProfileScreen.js(在此屏幕上,我尝试检索令牌,因为我将使用它)

const ProfileScreen = ({componentID}) => {
let testingAsync = retrieveItem(keys.jwtKey);
console.log(testingAsync);

控制台日志给我填充了其他对象的承诺对象。

Promise{_40:0, _65:0 , _55:null, _72:null}

在 _55 中我可以找到令牌的值。

感谢您的意见!正如@Bergi 在他的评论中提到的那样,我通过在我的 ProfileScreen 中使用 .then() 解决了这个问题。然后,在我收到第二条评论后,我在我的 ProfileScreen 中的 useEffect 中创建了一个 async&await 函数,以防止它重复自身,这为我解决了这个问题!