首页 > 解决方案 > 没有 thunk 的 redux-promise-middleware 错误处理

问题描述

我们正在使用 redux-promise-middleware 并且在弄清楚如何处理错误时遇到了一些困难,所有返回为 400 代码的错误都被处理为“FULFILLED”。我知道这可能是正确的行为,但肯定有一种方法可以在此设置中捕获承诺中的错误。由于我们没有使用 redux-thunk,我特地问你如何处理从 promise 返回的 400 错误。

我们的设置非常基本,但我相信我们应该能够

const export doSomething = object => {
 const promise = API.doSomething(object)
 return {
  type: "DO_SOMETHING",
  payload: {promise: promise}
 }
}

减速器

export default (state = initialstate, action) {
 switch(action.type){
  case "DO_SOMETHING_FULFILLED":
   return action.payload
  case "DO_SOMETHING_REJECTED":
   return console.log(action.payload)
  default:
   return initialstate
}

任何帮助是极大的赞赏。

标签: reactjsreact-reduxredux-promise-middleware

解决方案


首先你不需要将payload设置为{promise: promise} 直接把promise先试试这个

export const doSomething = object => {
 return {
  type: "DO_SOMETHING",
  payload: API.doSomething(object)
 }
}

这只是一点装饰建议(非义务)

export const doSomething = object => ({
   type: "DO_SOMETHING",
   payload: API.doSomething(object)
})

现在答案是:首先,您需要检查 API.doSomething(object) 是否抛出错误或在 400 响应代码的情况下返回 Promise.reject()

如果不是,你需要让它抛出

if(res.code === 400) {
  throw new Error()
}

// Or just use a library like axios 

Promise 不知道你的代码里面发生了什么,为了到达DO_SOMETHING_REJECTED IsAPI.doSomething(object)抛出 400


推荐阅读