jQuery 약속을 반환하는 Vuex 작업이 작동하지 않습니다. .fail은 함수가 아닙니다.
이런 Vuex 액션이 있어요.
myAction() {
const deferred = $.Deferred();
setTimeout(() => deferred.resolve(), 3000);
return deferred.promise();
}
vue 컴포넌트에서
myMethod() {
this.myAction().fail(() => ...do something...);
}
던지기 오류:
Uncaughed TypeError: this.myAction(...).fail은 함수가 아닙니다.
코드는 정상적으로 동작하고 있었지만, npm modules/vue-cli/webpack 등을 업데이트 했을 때 문제가 발생했습니다.또 다른 포인트는 내가 변하면.fail
로..catch
잘 작동해요.하지만 문제는 왜.fail
작동하지 않는가?
Vuex 3.4.0 이후 작업은 항상 기본 약속을 반환합니다.이전 버전에서는 Vuex는 동작으로 인해 반환할 수 없는 오브젝트(즉,.then
소유물.그렇지 않은 경우 액션 반환 값을 새로운 약속으로 묶습니다.하지만 만약 그렇다면, 그것은 약속이라고 가정하고 물건을 포장하지 않고 그냥 돌려보냈다.Vuex는 3.4.0 이후로는 nable 객체까지 래핑합니다.
그래서 옛날에는$.Deferred
그 약속은 스쳐 지나갈 수 있었다. 왜냐하면 그 약속에는.then
를 반환하는 메서드$
와 반대하기로 약속하다.fail
방법.하지만 지금은 원주민의 약속에 싸여 있다.
레지스터액션
Vuex 소스를 검사하면registerAction
3.3.0에서 3.4.0으로 변경되지 않았습니다.여기서 약속으로 포장할 수 없는 반환값이 나옵니다.변경되지 않았습니다.
function registerAction (store, type, handler, local) {
...
if (!isPromise(res)) {
res = Promise.resolve(res);
}
...
}
store.syslog.syslog.syslogs
그렇지만store.dispatch.prototype
변했어요.예전엔 그냥 돌려주곤 했어요..then
방법:
return result.then(function (res) {
...
})
그러나 지금은 항상 약속 래퍼를 반환합니다.
return new Promise(function (resolve, reject) {
result.then(function (res) { // Doesn't return the inner promise either
...
})
})
포장지 역시 내부 결과를 반환하지 않습니다.Vuex는 행동의 수익 가치를 정상화하기로 결정한 것으로 보여 원어민 약속으로 보장됩니다.
언급URL : https://stackoverflow.com/questions/64815666/vuex-action-returning-jquery-promise-doesnt-work-fail-is-not-a-function
'programing' 카테고리의 다른 글
테스트 폴더에 상대 프로젝트 루트 경로를 사용하여 Vue 가져오기 (0) | 2022.07.11 |
---|---|
SLF4J: "org.slf4j.impl" 클래스를 로드하지 못했습니다.Static Logger Binder" (0) | 2022.07.11 |
C 경고 함수 호출에 sentinel이 없습니다. (0) | 2022.07.11 |
리덕스 셀렉터와 같은 Vuex 셀렉터 (0) | 2022.07.11 |
"Vue 유형에 속성이 없습니다" 오류 해결 (0) | 2022.07.11 |