变量不';javascript中的不可更改
我有一个这样的代码,变量不';javascript中的不可更改,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我有一个这样的代码,console.log(token)显示未定义的 var token; store.get('userTokens').then(res => { token = res.idToken.jwtToken; console.log(res.idToken.jwtToken); }); switch (type) { case 'get': console.log(token); Axios.get(base
console.log(token)
显示未定义的
var token;
store.get('userTokens').then(res => {
token = res.idToken.jwtToken;
console.log(res.idToken.jwtToken);
});
switch (type) {
case 'get':
console.log(token);
Axios.get(baseUrl + url, {
headers: {
Authorization: `Bearer ${token}`,
extraHeaders,
},
})
.then(res => {
console.log(res);
return res;
})
.catch(err => {
console.log(err);
return err;
});
break;
}
您需要将
switch
语句移动到store.get
的承诺解决(或拒绝)后的某个位置
var令牌;
store.get('userTokens')。然后(res=>{
token=res.idToken.jwtToken;
开关(类型){
案例“get”:
console.log(令牌);
获取(baseUrl+url{
标题:{
授权:`Bearer${token}`,
额外标题,
},
})
。然后(res=>{
控制台日志(res);
返回res;
})
.catch(错误=>{
控制台日志(err);
返回错误;
});
打破
}
});
或者您可以使用
wait
来等待存储。get
函数返回res
您必须小心使用来自ajax回调方法之外的ajax调用的数据。请求是异步的,通常您的请求尚未完成,但您已经尝试使用存储响应数据的变量
由于您使用的是react,请尝试创建一个名为token
的状态变量,然后在使用switch语句之前侦听它的更改
正如其他人所建议的,在当前场景中,您需要执行以下操作:
var token;
store.get('userTokens').then(res => {
token = res.idToken.jwtToken;
// Check if token has value before you use it.
if(token)
{
switch (type) {
case 'get':
console.log(token);
Axios.get(baseUrl + url, {
headers: {
Authorization: `Bearer ${token}`,
extraHeaders,
},
})
.then(res => {
console.log(res);
return res;
})
.catch(err => {
console.log(err);
return err;
});
break;
}
}
});
为避免错误,请始终检查数据是否来自响应,然后执行操作
由于您使用的是React,我建议您使用React特性来实现这一点。例如,使用React钩子,检查此方法:
函数组件()
{
const[token,setToken]=useState(“”);
//当令牌值更改时执行某些操作
useffect(()=>{
如果(令牌)
performSwitchOperations(token);//传递状态变量token
},[token])
//检索令牌时要执行的函数
const performSwitchOperations=(令牌)=>
{
开关(类型){
案例“get”:
console.log(令牌);
获取(baseUrl+url{
标题:{
授权:`Bearer${token}`,
额外标题,
},
})
。然后(res=>{
控制台日志(res);
返回res;
})
.catch(错误=>{
控制台日志(err);
返回错误;
});
打破
}
}
const performAjaxRequest=()=>
{
return store.get('userTokens')。然后(res=>
{
log(res.idToken.jwtToken);
setToken(res.idToken.jwtToken);
});
}
}
因为您尚未定义它,所以您刚刚声明了它,async仍在进行中……这是否回答了您的问题?