有关AsyncStorage的问题。我正在使用RN应用,因此我需要异步存储来跟踪用户的登录状态和 token 。

我看到的与AsyncStorage的行为确实不一致。使用以下代码,我应该看到'loggedIn'变量状态的控制台日志。有些跑步我确实看到了,有些跑步我没有看到。我不确定为什么吗?我在我的根组件的componentwillmount()中称呼它。因此,我认为没有任何行为可以预先干预。

AsyncStorage.getItem('loggedIn').then((loggedIn) => {
      console.log('loggedIn:');
      console.log(loggedIn);
      if ( loggedIn != null)
      {
        this.state.loggedIn = true;
      }
    });

这段代码曾经以预期的方式记录日志,打印'loggedIn:null',但它停止了一点打印。即使我没有更改代码。似乎它甚至都没有进入.then块。

我也尝试过使用回调代替Promise,但仍然无法显示结果。
我不知道问题是什么。有任何想法吗?

我已经下载了Reactotron来尝试跟踪AsyncStorage的行为。但是,当我尝试在另一个组件中设置变量时,似乎没有对AsyncStorage进行任何更改,如下面的代码块所示。

成功登录后,我尝试保存密钥,但是它似乎也不起作用。我没有控制台日志,也没有在Reactotron上看到任何更改。
AsyncStorage.setItem('key', data.key, () => { AsyncStorage.getItem('key', (err, result) => {
                console.log(result)});});

不知道我还需要其他哪些代码片段来说明行为。

最佳答案

这应该有帮助

getData = async () => {
   try{
      await AsyncStorage.getItem('loggedIn', (err, loggedIn) => {
         if(!err && loggedIn!=null){
            this.setState({loggedIn});
         }
      })
   }catch(e){
      console.log("Error ", e);
   }
}

不要忘记在任何地方调用this.getData()

关于javascript - React Native AsyncStorage调用无效,不输入回调或.then,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49030073/

10-11 14:10