解决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动画和停止动画实例代码
Mar 01 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
Nov 14 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
Jan 03 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
JavaScript制作简单的日历效果
Mar 10 Javascript
判断是否存在子节点的实现代码
May 18 Javascript
javascript日期比较方法实例分析
Jun 17 Javascript
jquery实现左右轮播切换效果
Jan 01 jQuery
浅谈Vue数据绑定的原理
Jan 08 Javascript
vue仿element实现分页器效果
Sep 13 Javascript
JavaScript实现与使用发布/订阅模式详解
Jan 19 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 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
CI框架Session.php源码分析
2014/11/03 PHP
PHP队列用法实例
2014/11/05 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
JavaScript中的私有成员
2006/09/18 Javascript
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
使用requests库制作Python爬虫
2018/03/25 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
python版DDOS攻击脚本
2019/06/12 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
keras之权重初始化方式
2020/05/21 Python
详解Python 循环嵌套
2020/07/09 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
参赛口号
2014/06/16 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书