使用AsyncStorage检查React Native中的Json Web Token

时间:2016-12-07 03:12:27

标签: javascript react-native es6-promise

因此,在我的react-native项目中出现了一个非常常见的情况:在路由器安装之前检查用户是否有JWT(Json Web Token)用于身份验证。

在React中很容易:

const token = localStorage.getItem()
if (token !== null) store.dispatch(checkTokenSuccess())

但本地反应使用AsyncStorage代替localStorage,异步功能让我非常困扰。我无法在App组件中使用async-await,因为具有async关键字的任何函数将始终返回promise而不是react组件。

这是我的代码,显然,它被打破了:

AsyncStorage.getItem('JWT')
  .then((jwt) => {
    if (jwt !== null) {
      store.dispatch(checkJwtSuccess());
    }
  });

const App = () => (
  <Provider store={store}>
    <MainRouter />
  </Provider>
);

应用程序总是在获取jwt之前呈现。

如何让应用程序组件(我的整个应用程序的根目录)等到jwt fetch promise已解决?

修改

正如@zerkms指出的那样,JavaScript并没有阻止。然后我能想到的唯一解决方案是将App转换为React类并使用componentWillMount(),但这会使App组件变得笨拙。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

AsyncStorage需要2个参数errorCallbackvalue,您必须以这种方式编写代码

AsyncStorage.getItem("key",(err,value)) => {
   if(!err){
       console.log(value);
   }
});