vue中,axios异步加载数据,但是有的文件里面需要用到异步拿到的数据,数据还没拿到,文件已经执行了,这时候数据就是空,就会报错,这个问题怎么解决?具体表现:我这边vue项目是进入页面的时候会调用一个login方法,然后设置localStorage,this.login().then(res => { if (res.code === 0) {
localStorage.setItem(res.data.access_token)
}
});然后有一个api.js文件,使用的是axios方法const instance = axios.create({ baseURL: config.BASE_URL, headers: { Authorization: localStorage.getItem('Authorization') || ''
}
});export default {
getList() { return instance.request({ url: '123', method: 'get'
})
}
}但是因为login方法还没执行完api.js文件就已经执行了,所以localStorage.getItem('Authorization')就是空导致报错,请问这个问题怎么解决?
3 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
我知道了,可以用函数来实现,因为函数执行是实时的
就像使用
const SaleClockAuctionContract = window.web3.eth.contract(SaleClockAuction.abi).at(SaleClockAuction.address);const KittyCoreContract = window.web3.eth.contract(KittyCore.abi).at(KittyCore.address);
应该使用函数包装起来,实时调用,这样才不会因为文件加载顺序而出现window.web3未定义的错误,
const SaleClockAuctionContract = () => { window.web3.eth.contract(SaleClockAuction.abi).at(SaleClockAuction.address); }const KittyCoreContract = () => { window.web3.eth.contract(KittyCore.abi).at(KittyCore.address); }
叮当猫咪
TA贡献1776条经验 获得超12个赞
你可以利用axios和请求拦截器和响应拦截器来做处理
请求拦截器:在每一次发送请求判断localStorage中有没有toekn,如果有把token加入到header中,如果没有路由跳转到登录界面
2.响应拦截器:每一次收到响应时重新赋值localStorage中的token
添加回答
举报
0/150
提交
取消