为什么AsyncStorage getItem返回null?

时间:2018-02-16 06:41:57

标签: react-native asyncstorage

export const USER_KEY = "isLoggedIn";

export const phoneVerified = () => AsyncStorage.setItem(USER_KEY, 1);
export const userInfoVerified = () => AsyncStorage.setItem(USER_KEY, 2);

我已使用上述函数存储值,而下面的函数用于获取值。

export const isSignedIn = () => {
  return new Promise((resolve, reject) => {
    AsyncStorage.getItem(USER_KEY)
      .then(res => {
          console.log("from isSignedIn : "+res); //res is showing null.
        if (res !== null) {
          resolve(res);
        } else {
          resolve(0);
        }
      })
      .catch(err => reject(err));
  });
};

为什么这总是返回null?我正在尝试async / await但仍然是null。我想某些数据不会存储。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

正如@Vishu Bhardwaj所回答的那样AsyncStorage只接受字符串。因此,在这种情况下,您可以使用JSON.stringify()JSON.parse()

答案 2 :(得分:0)

这个愚蠢的问题困扰了我近一个星期,所有社区都没有建议其他方式为我工作,但是后来我发现一些东西是由react-native构建的,它的setState()回调函数是:{{ 3}}。 因此,我保证到目前为止唯一安全的方法是,在您的promise中使用setState()函数以及您需要运行的所有内容,将它们放在函数上,并为setState()回调调用它函数,这是您确保自己既不为空也不永远不调用函数的唯一途径。在这里,我将提供一个示例,其中this.tokeToServer()是我的函数,它用作回调函数。

try {
      AsyncStorage.getItem('firebase_token',(err,item) => {
        if (item) {
          this.setState({
            firebase_token: item,
          }),this.tokenToServer();
        }
      });
      } catch (error) {
      console.log("Error retrieving data" + error);
    }