在第三方制作的代码库中,我发现了这个 promise 链:
const signUp = ({ dispatch, commit, getters }, payload) => {
return dispatch('startTask', { id: signUpRequestTaskId }, { root: true })
.then(() => enrichSignUpPayload(payload, getters))
.then(apiRequest.signUpB2b);
};
为了解决应用程序中的某个问题,我需要删除链的第一个链接 (dispatch('startTask',...root: true })
):
const signUp = ({ dispatch, commit, getters }, payload) => {
return enrichSignUpPayload(payload, getters)
.then(apiRequest.signUpB2b);
};
但是这会触发以下错误:
为什么?在删除第一个链接之前没有错误,为什么第二个链接现在成为问题?我不明白。enrichSignUpPayload(...).then is not a function
以下是 enrichSignUpPayload()
函数的正文,以防万一:
const enrichSignUpPayload = payload => pipe(
payload,
(p) => ({ ...p, fromApp: isFromApp() }),
aperoFromStorage
);
最佳答案
您收到此错误是因为 enrichSignUpPayload
不像 dispatch
那样返回 promise
。此外,signUp
的第一个版本可以工作,因为对 promise.then
的调用也会返回一个 promise
,以便我们可以调用下一个 >.then
就可以了。引用this有关它的更多信息。
我想,为了让事情顺利进行,你可以这样做:
const enrichSignUpPayload = payload => pipe(
payload,
(p) => ({ ...p, fromApp: isFromApp() }),
aperoFromStorage,
(possibleValueFromAperoFromStorage) => Promise.resolve(possibleValueFromAperoFromStorage)
);
或者,如果 enrichSignUpPayload
不是异步的,您可以简单地执行以下操作:
const signUp = ({ dispatch, commit, getters }, payload) => {
const result = enrichSignUpPayload(payload, getters);
return apiRequest.signUpB2b(result)
};
关于javascript - Promise 链内的非 Promise 函数出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60526177/