无法处理 javascript/react Native 中 null 变量的情况

问题描述 投票:0回答:1

我正在尝试在我的反应本机登录屏幕中做一些非常简单的事情。我首先尝试获取用户的 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");
}
javascript react-native
1个回答
0
投票

您不能在异步函数之外使用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请求同时执行。 我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.