解决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队列queue与原生模仿其实现方法分享
Mar 25 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
Oct 09 Javascript
Jquery Easyui表单组件Form使用详解(30)
Dec 19 Javascript
基本DOM节点操作
Jan 17 Javascript
webpack4 处理SCSS的方法示例
Sep 03 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
vue下载excel的实现代码后台用post方法
May 10 Javascript
vue中echarts引入中国地图的案例
Jul 28 Javascript
简单了解three.js 着色器材质
Aug 03 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
Feb 05 Javascript
Vue实现todo应用的示例
Feb 20 Vue.js
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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
javascript实现点击产生随机图形
2021/01/25 Javascript
全面解读Python Web开发框架Django
2014/06/30 Python
Python中关于字符串对象的一些基础知识
2015/04/08 Python
python获取当前计算机cpu数量的方法
2015/04/18 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
python 检查文件mime类型的方法
2018/12/08 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
jupyter 导入csv文件方式
2020/04/21 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
物流管理毕业生自荐信
2013/10/24 职场文书
积极向上的团队口号
2014/06/06 职场文书
教育实习指导教师评语
2014/12/31 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
讨论nginx location 顺序问题
2022/05/30 Servers