首页 > 解决方案 > 为什么使用 AsyncStorage.setItem 没有问题?

问题描述

我创建了一个文件GetSetStorageinclude AsyncStorage,当我尝试使用它时,我发现它不起作用。

这是我的GetSetStorage文件:

import { AsyncStorage } from 'react-native';

class GetSetStorage {
  setStorageAsync(key, value) {
    console.log('start set storage');
    console.log(`key =>${key}`);
    console.log(`vaue =>${value}`);
    return new Promise((resolve, reject) => {
      console.log('Why is no working here ?');
      AsyncStorage.setItem(key, value, (error) => {
      console.log(error);
        if (error) {
          console.log('===');
          console.log(`set${key}error${error}`);
          console.log('===');
          reject(`set${key}error${error}`);
        } else {
          console.log('===');
          console.log(`set${key}succeed`);
          console.log('===');
          resolve(true);
        }
      });
    });
  }

  getStorageAsync(key) {
    return new Promise((resolve, reject) => {
      AsyncStorage.getItem(key, (error, result) => {
        console.log(error);
        console.log('where is my error');
        if (error) {
          console.log('===');
          console.log(`load ${key} error ${error}`);
          console.log('===');
          reject(`load ${key} erro ${error}`);
        } else {
          console.log('===');
          console.log(`load ${key} succeed`);
          console.log('===');
          resolve(result);
        }
      });
    });
  }
}

export default new GetSetStorage();

我在我的组件中使用它,如下所示:

import GetSetStorage from '../storage/GetSetStorage';

  componentWillMount() {
    GetSetStorage.setStorageAsync('testKey', 'test value');
  }

我看到我发现我的 console.logsetItem没有工作。为什么 ? 在此处输入图像描述

任何帮助,将不胜感激。提前致谢。

标签: react-nativeasyncstorage

解决方案


Asyncstorage 还返回一个承诺,因此您可以执行类似的操作

AsyncStorage.setItem('email', JSON.stringify(this.state.UserEmail))
  .then(() => console.log('saved email successfully'))
  .catch(err => console.error('something went wrong', err));

同样,要获取相同的密钥,您可以执行以下操作:

AsyncStorage.getItem('email')
.then(val => {
  if (val !== null) console.log(val); // You can do whatever you want with the email
})
.catch(err => console.error(err)) // if there was an error fetching data

请注意,如果异步存储中没有任何内容,它将返回“null”,因此为了处理错误,您需要将它们放在 if 语句中而不是 catch


推荐阅读