有关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/