解决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 select下拉框操作的一些说明
Apr 02 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
JavaScript中字符串分割函数split用法实例
Apr 07 Javascript
使用AngularJS实现表单向导的方法
Jun 19 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
May 10 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
Nov 05 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
Sep 27 Javascript
javascript实现函数柯里化与反柯里化过程解析
Oct 08 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 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入门速成教程
2007/03/19 PHP
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
详解vue配置后台接口方式
2019/03/29 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
Python中操作符重载用法分析
2016/04/29 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
python 装饰器的基本使用
2021/01/13 Python
php优化查询foreach代码实例讲解
2021/03/24 PHP
4s店总经理岗位职责
2013/12/31 职场文书
贷款承诺书范文
2014/05/19 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers