问题描述
使用动态路由下,进行异步请求的同时,不能进行重定向。
解决方法
1. 等待异步请求完成后再进行路由重定向
// 加载菜单
util.initRouter(this).then((res) => {
this.$router.push({
name: "home_index",
});
});
2. 改写initRouter
方法一
将异步请求方法写成Promise,之后使用then链式调用
util.initRouter = function () {
return new Promise((resolve, reject) => {
axios.get(getMenuList, { headers: { 'accessToken': accessToken } }).then(res => {
resolve();
//其他
});
})
};
方法二
将异步方法写成Async/await
util.initRouter = async function(){
let res = await axios.get(getMenuList, { headers: { 'accessToken': accessToken } })
//其他
}
说明:方法一和二是等价的
知识点
1. Promise
2. Async/await:await会暂停当前async方法的执行,直到await后的Promise处理完成,代码才能继续往下执行。