reactjs - 为什么我的 try catch block 不处理调度错误?

标签 reactjs redux dispatch

我无法在我的 try catch block 中得到被拒绝的 promise ,它的响应总是在 originalPromiseResult 中

这是我从 API 获取一些数据的切片:

export const getData = createAsyncThunk(
  'user/getData',
  async (headers, { rejectWithValue }) => {
    try {
      return await httpService.getData(headers)
    } catch (err) {
      console.error(e)
      return rejectWithValue(err.response.data)
    }
  }
)

这是我的组件:

const dispatch = useDispatch()

const myCallback = async (data) => {
    try {
      const originalPromiseResult = await dispatch(getData(data))
    } catch (error) {
      console.log('error = ', error)
    }
}

最佳答案

createAsyncThunk 始终 在内部处理所有抛出的错误 - 否则您会在控制台中看到很多“未捕获的被拒绝的 Promise”警告。这意味着它也总是返回一个已解决的 Promise,其中包含已调度的操作

根据我们的文档,如果您想根据分派(dispatch)在组件级别执行 try/catch,您需要“解包”返回的 promise 。如果分派(dispatch)了 fulfilled 操作,这将返回 payload,或者如果分派(dispatch)了 rejected 操作,则重新抛出错误。

    try {
      const originalPromiseResult = await dispatch(getData(data)).unwrap()
    } catch (error) {
      console.log('error = ', error)
    }

引用:

https://redux-toolkit.js.org/api/createAsyncThunk#unwrapping-result-actions

关于reactjs - 为什么我的 try catch block 不处理调度错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68896099/

相关文章:

javascript - 如何使用传递给 reducer 的事件对象验证 reducer 内的单选按钮?

javascript - 在 React-Three-Fiber 中渲染索引缓冲区几何

reactjs - 如何从深层嵌套组件访问 Redux 存储

reactjs - 如何在 redux 工具包中模拟存储

javascript - 以 Redux 形式动态加载 initialValues

dynamic - Kotlin 中动态/双重调度的限制是什么?

java事件队列事件调度刷新/陷阱事件

reactjs - 在 Ubuntu 18.04 上使用 yarn 安装软件包时出现问题

java - 如何调用重载方法的最具体版本?

javascript - 通过reducer获取相同数据或空数据