我正在尝试在我的反应本机登录屏幕中做一些非常简单的事情。我首先尝试获取用户的 userId,如果未设置,我想重定向到用户的登录页面。当未设置 userId 时,我控制台并获取它的空值。但是当我创建一个 if 语句来检查 userId === null 时它不起作用。 关于我做错了什么有什么想法吗?
const userId = await AsyncStorage.getItem('userId');
console.warn(userId);
console.warn("When userId is not set I get a value of null");
if (userId === null) {
console.warn("However this check for null is not working");
navigation.navigate("UserLoginWeb");
}
您不能在异步函数之外使用await。 因此,除非这是异步函数的内部,否则 userid 的值是一个待处理的承诺
您应该在异步函数中包含此代码,尽管该函数也会返回一个承诺。
async function x(){
const userId = await AsyncStorage.getItem('userId');
console.warn(userId);
console.warn("When userId is not set I get a value of null");
if (userId === null) {
console.warn("However this check for null is not working");
navigation.navigate("UserLoginWeb");
}
}
或者你应该这样做:
AsyncStorage.getItem('userId').then((userId)=>{
console.warn(userId);
console.warn("When userId is not set I get a value of null");
if (userId === null) {
console.warn("However this check for null is not working");
navigation.navigate("UserLoginWeb");
}
});
console.log("hello");
异步函数不会阻塞主代码,后续发布的代码将与异步请求同时继续执行。 例如上面代码中的hello将与userid请求同时执行。 我希望这有帮助。