programing

jQuery 약속을 반환하는 Vuex 작업이 작동하지 않습니다. .fail은 함수가 아닙니다.

goodsources 2022. 7. 11. 21:32
반응형

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 소스를 검사하면registerAction3.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

반응형