Vue-Router 업그레이드 로 인 한 Uncaught(in promise)문제 해결
3745 단어 Vue-Router업그레이드Uncaughtinpromise
이게 무슨 이유 일 까요?
vue-router 버 전 보기업데이트 로그
V 3.1.0 버 전에 서 추가 기능:push 와 replace 방법 은 promise 를 되 돌려 줍 니 다.콘 솔 에서 캡 처 되 지 않 은 이상 을 볼 수 있 습 니 다.
해결 방법 1:방법 을 호출 할 때 catch 로 이상 을 포착 합 니 다.
this.$router.replace({ name: 'foo' }).catch(err => {
console.log('all good')
})
방법 2: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);
}
……
}
이 방법분석()
Uncaught(in promise)undefined,캡 처 되 지 않 은 promise,프로그램 이 실제로 오류 가 발생 하지 않 았 기 때 문 입 니 다.이것 은 내 비게 이 션($router.push)일 뿐,beforenter 갈고리 에서 방향 을 바 꾸 기(next('/foo')를 생 성 합 니 다.
Vue-router>=3.1.0 버 전 은 push 와 replace 를 사용 하여 점프 할 때 콘 솔 에 이상 이 발생 합 니 다.그 주요 원인 은 vue-router 3.1.0 버 전 이후 router.push('/path')가 promise 로 돌 아 왔 을 때 오류 가 발생 합 니 다.이전 버 전 은 vue-router 가 오류 정 보 를 되 돌려 주지 않 았 기 때 문 입 니 다.그래서 우 리 는 이상 이 존재 하지 않 는 것 이 아니 라 이상 을 잡 을 수 없 었 다.그 러 니까 우리 가 해 야 할 일 은
해결 하 다.
1.$push 대신 route-link to bar 사용
<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)
}
ok!이상 모든 방법 은 직접 측정 하면 효과 가 있 습 니 다~
Vue-Router 업그레이드 로 인 한 Uncaught(in promise)문 제 를 해결 하 는 이번 편 은 바로 편집장 님 께 서 여러분 께 공유 해 주신 모든 내용 입 니 다.참고 해 주시 고 많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue-Router 업그레이드 로 인 한 Uncaught(in promise)문제 해결방법 2:Router 원형 체인 에 있 는 push,replace 방법 을 다시 쓰 면 매번 호출 방법 에 catch 를 추가 하지 않 아 도 됩 니 다.이 방법 은 vue-router 의 중의 한 사내 가 해결 한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.