解决Vue-Router升级导致的Uncaught (in promise)问题


Posted in Javascript onAugust 07, 2020

在升级了Vue-Router版本到到3.1.0及以上之后,页面在跳转路由控制台会报Uncaught (in promise)的问题

解决Vue-Router升级导致的Uncaught (in promise)问题

这是什么原因呢?

看vue-router的版本更新日志

V3.1.0版本里面新增功能:push和replace方法会返回一个promise, 你可能在控制台看到未捕获的异常

解决Vue-Router升级导致的Uncaught (in promise)问题

解决方法一:在调用方法的时候用catch捕获异常

this.$router.replace({ name: 'foo' }).catch(err => {
 console.log('all good')
})

方法二: 对Router原型链上的push、replace方法进行重写,这样就不用每次调用方法都要加上catch。这个方法是vue-router的issues里面的一位大佬解决的

import Router from 'vue-router'
 
const originalPush = Router.prototype.push
Router.prototype.push = function push(location, onResolve, onReject) {
 if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
 return originalPush.call(this, location).catch(err => err)
}

补充知识:vue-router使用$router.push(),页面挂起进入debug模式,提示Uncaught (in promise) undefined

问题

vue-router使用$router.push()跳转页面时,页面挂起进入debug模式,提示“Uncaught (in promise) undefined”,断点进入

function (err) {
   if (onAbort) {
    onAbort(err);
   }
   ……
}

此方法

解决Vue-Router升级导致的Uncaught (in promise)问题

分析()

Uncaught (in promise) undefined,未捕获的promise,因为应用程序实际上没有生成任何错误。它只是一个导航($router.push),在beforeEnter钩子中生成重定向(next('/ foo'))

Vue-router >= 3.1.0 版本在使用 push 和 replace 进行跳转时控制台会抛出异常,其主要原因是 vue-router 3.1.0 版本以后 router.push('/path') 返回了 promise ,而当路由跳转异常时便会抛出错误,此前版本没有报错是因为 vue-router 根本没有返回错误信息,所以之前我们一直无法捕获异常,而并非异常不存在。所以我们要做的就是在路由跑出异常时加上可以接收的回调就好了。

解决

1.使用route-link to bar代替$push

<router-link to="/settlement_manage/account">
    <el-button :disabled="loading" size="mini" type="warning">
      查看详情
    </el-button>
  </router-link>

2.对所有调用进行push更新:

this.$router.push({
    path: '/settlement_manage/account',
  }, () => {});

3.使用时进行错误拦截

router.push('/path').catch(err => {})

4.显式指定onComplete和onAbort回调函数

this.$router.push({
    path: `/settlement_manage/account`
   },
   onComplete => {
    console.log('完成')
   },
   onAbort => {
    console.log('哦打断了')
   })

5.引入router之前重写push方法,在router.js里加

const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location, onResolve, onReject) {
 if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
 return originalPush.call(this, location).catch(err => err)
}

解决Vue-Router升级导致的Uncaught (in promise)问题

ok!以上所有方法亲测有效~

以上这篇解决Vue-Router升级导致的Uncaught (in promise)问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
ExtJS判断IE浏览器类型的方法
Feb 10 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
原生js和jQuery写的网页选项卡特效对比
Apr 27 Javascript
jquery模拟alert的弹窗插件
Jul 31 Javascript
学习JavaScript设计模式之责任链模式
Jan 18 Javascript
几种经典排序算法的JS实现方法
Mar 25 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
Jun 14 Javascript
利用js给datalist或select动态添加option选项的方法
Jan 25 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
Apr 28 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
JavaScript实现多文件下载方法解析
Aug 07 #Javascript
基于javascript的无缝滚动动画1
Aug 07 #Javascript
vue-router重写push方法,解决相同路径跳转报错问题
Aug 07 #Javascript
手把手带你搭建一个node cli的方法示例
Aug 07 #Javascript
Vue两种组件类型:递归组件和动态组件的用法
Aug 06 #Javascript
vue数据更新UI不刷新显示的解决办法
Aug 06 #Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 #Javascript
You might like
PHP批量生成缩略图的代码
2008/07/19 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
php中Smarty模板初体验
2011/08/08 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
Django自定义认证方式用法示例
2017/06/23 Python
python3实现高效的端口扫描
2019/08/31 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
python 如何上传包到pypi
2020/12/24 Python
英国电气世界:Electrical World
2019/09/08 全球购物
中专生的个人自我评价
2013/12/11 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
转学证明范本
2015/06/19 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技