在第三方制作的代码库中,我找到了这个承诺链:
gcloud compute instances create-with-container [INSTANCE_NAME] \
--container-image [DOCKER_IMAGE]
要解决应用程序中的某个问题,我需要删除链的第一个链接(const signUp = ({ dispatch, commit, getters }, payload) => {
return dispatch('startTask', { id: signUpRequestTaskId }, { root: true })
.then(() => enrichSignUpPayload(payload, getters))
.then(apiRequest.signUpB2b);
};
):
dispatch('startTask',...root: true })
但是这会引发以下错误:
enrichSignUpPayload(...)。那么它不是一个函数
为什么?在删除第一个链接之前没有任何错误,那么为什么第二个链接现在成为问题?我不明白。
这里是const signUp = ({ dispatch, commit, getters }, payload) => {
return enrichSignUpPayload(payload, getters)
.then(apiRequest.signUpB2b);
};
函数的正文,以防万一:
enrichSignUpPayload()
答案 0 :(得分:1)
您收到此错误消息是因为enrichSignUpPayload
不会像promise
那样返回dispatch
。同样,第一个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)
};
答案 1 :(得分:0)
您尝试添加返回函数
const signUp = ({ dispatch, commit, getters }, payload) => {
return () => enrichSignUpPayload(payload, getters) // Here add function
.then(apiRequest.signUpB2b);
};
答案 2 :(得分:0)
enrichSignUpPayload
没有返回承诺。
您可以使用Promise.resolve
包装结果:
const signUp = ({ dispatch, commit, getters }, payload) =>
Promise.resolve(enrichSignUpPayload(payload, getters))
.then(apiRequest.signUpB2b)