我有一个本机应用程序,我会进行一些身份验证。
我有以下代码,我检查令牌是否未过期且可用。
export const isLogged = () => {
AsyncStorage.getItem('@token')
.then( token => {
if (typeof token !== 'undefined') {
if (tokenExpired(token)) {
return false
}
return true
}
return false
} )
.catch( error => {
return false
} )
}
但是在我的代码中,如果我这样做:
let isUserLogged = isLogged()
console.log(isUserLogged) // -> returns undefined, but should return true because the token is there and its not expired.
有没有人知道为什么会这样,我做错了什么?
答案 0 :(得分:4)
您正在尝试同步获取仅异步可用的结果。
更改您的代码:
在此次通话前添加return
:
AsyncStorage.getItem('@token')
这将使您的isLogged
函数返回一些内容:一个承诺
在主代码中使用此承诺:
isLogged().then( isUserLogged => {
console.log(isUserLogged);
});
你的函数isLogged
返回一个promise(当你返回它时)就是chaining的一个例子。
答案 1 :(得分:1)
您的isLogged
函数是一个异步函数,即 - 它在函数执行的确切时刻可能无法使用的值上运行,但在时间上延迟。
由于您已在此处运行Promises,因此您只需返回AsyncStorage
承诺链的结果,然后在调用isLogged()
函数时附加其他处理程序:
// inside your isLogged() function
return AsyncStorage.getItem('@token')
.then(...)
... rest of your code unchanged ...
// when invoking isLogged()
isLogged().then((isLogged) => {
console.log("is user logged: ", isLogged);
});
您还应该阅读有关JavaScript中Promises的更多信息。