为什么使用 AsyncStorage.setItem 不起作用?

Why use AsyncStorage.setItem is no wroking?

我创建了一个文件 GetSetStorage 包含 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.log 我发现 setItem 不工作。为什么 ?

如有任何帮助,我们将不胜感激。提前致谢。

//看看吧!

state = {
        UserEmail: 'abcd@gmail.com'
      }

async setValue() {
        await AsyncStorage.setItem('email', JSON.stringify(this.state.UserEmail));
 }



async getValue() {
  try {
       const value = await AsyncStorage.getItem('email');
         if (value !== null) {
            // We have data!!
            console.log(value);
         }
      } catch (error) {
          // Error retrieving data
    }
 }

Asyncstorage 也是 return 的一个承诺,所以你可以做类似的事情

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

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