javascript - Promise 链内的非 Promise 函数出现错误

标签 javascript ecmascript-6 promise

在第三方制作的代码库中,我发现了这个 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/

相关文章:

javascript - 根据已知的纬度和经度点在图像上放置点的失败尝试

javascript - 如何将值从 Promise.all 传递到 .then()?

javascript - 使用具有递归函数的 promise

javascript - 将模块隐藏在闭包中的原因是什么?

javascript - 使用 moment.js 禁用日期范围选择器中的 future 日期

node.js - 使用 require() 并导入私有(private) npm 模块失败

javascript - 尽管局部变量的值发生了变化,但全局变量的值并未发生变化

javascript - 如何同时解构和复制数组?

node.js - 未处理的拒绝范围错误: invalid status code: 0

javascript - 悬停时显示 div,不悬停时隐藏