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