javascript中catch内的更新状态

javascript中catch内的更新状态,javascript,Javascript,我目前正在编写一个向第三方网站发送请求的脚本,但过了一段时间,cookie就无效了&它抛出了一个403 所以我有我的脚本来发送请求,如果它抛出403,那么我们发送有效的cookies,然后重新发送请求 但是,在catch函数中更新后,状态.device_info似乎仍未定义 (异步()=>{ 让状态={ “访问被拒绝”:false, “cookies”:{} }; 试一试{ 等待获取cookies(状态); state.device_info=等待getInfo(state).catch(异步(

我目前正在编写一个向第三方网站发送请求的脚本,但过了一段时间,cookie就无效了&它抛出了一个403

所以我有我的脚本来发送请求,如果它抛出403,那么我们发送有效的cookies,然后重新发送请求

但是,在catch函数中更新后,
状态.device_info
似乎仍未定义

(异步()=>{
让状态={
“访问被拒绝”:false,
“cookies”:{}
};
试一试{
等待获取cookies(状态);
state.device_info=等待getInfo(state).catch(异步(错误)=>{
让localError=handleError(错误,状态);
如果(localError==='access\u denied'){
state.access_denied=true;
//现在让我们解锁请求并再次发送它!
let post=等待发送有效邮件(状态);
if(post.data.success==true){
//使用工作请求更新state.device\u信息!
state.device_info=等待getInfo(state).catch(异步(错误)=>{
log('该死,我们又出了一个错误!');
console.log(错误);
})
如果(state.device_info.status==200){
log('我们使用未锁定的请求获得了信息!');
state.access_denied=false;
}
}
}
});
if(state.device_info==未定义| | state.access_denied==真){
log('我们有一个未定义的值!');
console.log(state.device_info);//未定义
console.log(state.access_denied);//false
返回false;
}
}捕获(错误){
console.log('mair error!');
}
})();

由于您在方法调用前面使用了
wait
关键字
getInfo(state)
并且您正在调用
.catch(…)
,因此我假设
getInfo(state)
会返回一个承诺

有两种方法可以在JavaScript中处理承诺:

  • 通过显式调用
    .then(result=>{…})
    ,同时使用
    .catch(error=>{…})
    捕获错误
  • wait
    关键字放在方法调用前面。通过使用此语法,如果您想要捕获错误(您应该这样做),您需要使用
    try{}catch(error){}
    语法
我从来没有像你那样混合使用过这两种方法,我认为这可能是你遇到的问题的根源

对于您的情况,它应该如下所示:

try {
  state.device_info = await getInfo(state);
} catch (error) {
  // Your logic here...
}

只需返回值,而不是在catch中定义它。此返回值将被分配到
状态。设备信息

state.device_info = await getInfo(state).catch(async (error) => {
    let localError = handleError(error, state);
        if(localError === 'access_denied') {
            state.access_denied = true;
            //now lets unlock the request & send it again!
            let post = await sendValidCookies(state);
            if(post.data.success === true) {
                //Get result from WORKING request
                const result = await getInfo(state).catch(async (error) => {
                    console.log('Damn we got another error!');
                    console.log(error);
                });

                if(state.device_info.status === 200) {
                    console.log('We got our info info using the unlocked request!');
                    state.access_denied = false;
                }

                return result;
            }
        }
});

尝试使用Try/catch包装
wait getInfo
,而不是promise catch。我认为您下面的代码可能在错误处理之前执行。