解决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 相关文章推荐
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
Aug 15 Javascript
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
JSON辅助格式化处理方法
Mar 26 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
Mvc提交表单的四种方法全程详解
Aug 10 Javascript
jQuery常用选择器详解
Jul 17 jQuery
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
Jan 15 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
Sep 30 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 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
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
PHP 程序员的调试技术小结
2009/11/15 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
深入了解python中元类的相关知识
2019/08/29 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
业务员薪酬管理制度
2014/01/15 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
中标通知书范本
2015/04/17 职场文书
家长会感言
2015/08/01 职场文书