解決Vue-Router升級(jí)導(dǎo)致的Uncaught (in promise)問(wèn)題
在升級(jí)了Vue-Router版本到到3.1.0及以上之后,頁(yè)面在跳轉(zhuǎn)路由控制臺(tái)會(huì)報(bào)Uncaught (in promise)的問(wèn)題
這是什么原因呢?
看vue-router的版本更新日志
V3.1.0版本里面新增功能:push和replace方法會(huì)返回一個(gè)promise, 你可能在控制臺(tái)看到未捕獲的異常
解決方法一:在調(diào)用方法的時(shí)候用catch捕獲異常
this.$router.replace({ name: 'foo' }).catch(err => { console.log('all good') })
方法二: 對(duì)Router原型鏈上的push、replace方法進(jìn)行重寫(xiě),這樣就不用每次調(diào)用方法都要加上catch。這個(gè)方法是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) }
補(bǔ)充知識(shí):vue-router使用$router.push(),頁(yè)面掛起進(jìn)入debug模式,提示Uncaught (in promise) undefined
問(wèn)題
vue-router使用$router.push()跳轉(zhuǎn)頁(yè)面時(shí),頁(yè)面掛起進(jìn)入debug模式,提示“Uncaught (in promise) undefined”,斷點(diǎn)進(jìn)入
function (err) { if (onAbort) { onAbort(err); } …… }
此方法
分析()
Uncaught (in promise) undefined,未捕獲的promise,因?yàn)閼?yīng)用程序?qū)嶋H上沒(méi)有生成任何錯(cuò)誤。它只是一個(gè)導(dǎo)航($router.push),在beforeEnter鉤子中生成重定向(next('/ foo'))
Vue-router >= 3.1.0 版本在使用 push 和 replace 進(jìn)行跳轉(zhuǎn)時(shí)控制臺(tái)會(huì)拋出異常,其主要原因是 vue-router 3.1.0 版本以后 router.push('/path') 返回了 promise ,而當(dāng)路由跳轉(zhuǎn)異常時(shí)便會(huì)拋出錯(cuò)誤,此前版本沒(méi)有報(bào)錯(cuò)是因?yàn)?vue-router 根本沒(méi)有返回錯(cuò)誤信息,所以之前我們一直無(wú)法捕獲異常,而并非異常不存在。所以我們要做的就是在路由跑出異常時(shí)加上可以接收的回調(diào)就好了。
解決
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.對(duì)所有調(diào)用進(jìn)行push更新:
this.$router.push({ path: '/settlement_manage/account', }, () => {});
3.使用時(shí)進(jìn)行錯(cuò)誤攔截
router.push('/path').catch(err => {})
4.顯式指定onComplete和onAbort回調(diào)函數(shù)
this.$router.push({ path: `/settlement_manage/account` }, onComplete => { console.log('完成') }, onAbort => { console.log('哦打斷了') })
5.引入router之前重寫(xiě)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) }
ok!以上所有方法親測(cè)有效~
以上這篇解決Vue-Router升級(jí)導(dǎo)致的Uncaught (in promise)問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決vue-cli輸入命令vue ui沒(méi)效果的問(wèn)題
這篇文章主要介紹了解決vue-cli輸入命令vue ui沒(méi)效果的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Vue利用vue-baidu-map實(shí)現(xiàn)獲取經(jīng)緯度和搜索地址
在開(kāi)發(fā)項(xiàng)目的時(shí)候,發(fā)現(xiàn)需要獲取經(jīng)緯度,由于這個(gè)項(xiàng)目是用vue寫(xiě)的,最后決定使用vue-baidu-map來(lái)快速獲取經(jīng)緯度,感興趣的可以了解一下2022-09-09Vue頁(yè)面刷新記住頁(yè)面狀態(tài)的實(shí)現(xiàn)
這篇文章主要介紹了Vue頁(yè)面刷新記住頁(yè)面狀態(tài)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-12-12npm?install安裝報(bào)錯(cuò)的幾種常見(jiàn)情況
當(dāng)你跑起一個(gè)項(xiàng)目的時(shí)候,第一步需要先安裝依賴npm install,下面這篇文章主要給大家介紹了關(guān)于npm?install安裝報(bào)錯(cuò)的幾種常見(jiàn)情況,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07vue動(dòng)態(tài)綁定background的方法
background是background-color,background-image,background-repeat,background-attachment,background-position,background-size等屬性的縮寫(xiě),本文我用動(dòng)態(tài)綁定background-image來(lái)舉例,感興趣的朋友跟隨小編一起看看吧2023-10-10