2016-12-07 55 views
2

因此,在我的react-native项目中出现了一个非常常见的情况:在路由器挂载之前,检查用户是否具有JWT(Json Web Token)以进行身份​​验证。使用AsyncStorage检查React Native中的Json Web Token

这很容易在阵营:

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

但反应母语使用AsyncStorage代替localStorage和异步功能已困扰了我这么多。我无法在App组件中使用异步等待,因为任何使用async关键字的函数都将始终返回promise,而不是反应组件。

这里是我的代码,很显然,它的分解:

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

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

应用始终呈现前智威汤逊是牵强。

如何让应用程序组件(我的整个应用程序的根)等到jwt获取诺言已解决?

编辑:

由于@zerkms指出,JavaScript不阻塞。然后,我能想到的唯一解决方案是将应用程序变成React类并使用componentWillMount(),但这会使App组件变得笨重。有更好的解决方案

+0

'await'不阻塞,因此,它的工作原理完全一样,你实现它。 – zerkms

+0

@zerkms感谢您的评论!但是,等待的目的是什么?而且,如果我想在这里阻止,我应该采取什么方法? –

+0

您无法使用javascript进行阻止。 – zerkms

回答

0

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

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

这似乎不是正确的语法。在这里查看官方文档https://facebook.github.io/react-native/docs/asyncstorage.html。 –

+0

@StanleyLuo你是对的,我刚刚更新了我的答案 –

+0

其实它仍然不正确。第一个参数应该是关键,然后是回调函数。 –

相关问题