解决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 相关文章推荐
分享14个很酷的jQuery导航菜单插件
Apr 25 Javascript
javascript学习笔记(五) Array 数组类型介绍
Jun 19 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
浅谈JavaScript function函数种类
Dec 29 Javascript
JavaScript中的console.group()函数详细介绍
Dec 29 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 Javascript
Vue实现点击时间获取时间段查询功能
Aug 21 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 Javascript
详解Vue内部怎样处理props选项的多种写法
Nov 06 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
php中截取字符串支持utf-8
2007/01/18 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
总结对比php中的多种序列化
2016/08/28 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
手动初始化Angular的模块与控制器
2016/12/26 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
python语音识别实践之百度语音API
2018/08/30 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
高二学生评语大全
2014/04/25 职场文书
政协调研汇报材料
2014/08/15 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
培训感想范文
2015/08/07 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python
一文简单了解MySQL前缀索引
2022/04/03 MySQL