You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux Toolkit createAsyncThunk 网络错误时返回success状态如何修复

问题根因

createAsyncThunk 触发rejected状态的前提是回调函数抛出未捕获的异常。你当前的代码在catch块中直接return了错误信息,属于回调正常返回值,因此会走fulfilled逻辑,错误信息被当作成功的payload处理,自然不会进入错误状态。

修复方案

方案一:直接抛出错误

catch到错误后直接抛出,触发createAsyncThunk的默认错误逻辑:

export const getPosts = createAsyncThunk("posts/getPostsStatus", async () => {
  try {
    const { data } = await axios.get(GET_POSTS_API);
    return data;
  } catch (error) {
    // 替换原来的return为throw,抛出错误触发rejected状态
    throw error.response ? error.response.data.message : error.message;
  }
});

需同步修改rejected回调的取值逻辑,抛出的默认错误会挂载在action.error上:

[getPosts.rejected]: (state, action) => {
  state.status = "error";
  state.error = action.error.message;
}

方案二:使用rejectWithValue返回自定义错误(推荐)

使用createAsyncThunk内置的rejectWithValue工具,可以自定义错误payload,无需修改原有reducer逻辑:

// 回调第二个参数为thunkAPI对象,解构获取rejectWithValue方法
export const getPosts = createAsyncThunk("posts/getPostsStatus", async (_, { rejectWithValue }) => {
  try {
    const { data } = await axios.get(GET_POSTS_API);
    return data;
  } catch (error) {
    const errMsg = error.response ? error.response.data.message : error.message;
    // 返回rejectWithValue会自动触发rejected状态,错误信息挂载在action.payload
    return rejectWithValue(errMsg);
  }
});

该方案适配你原有rejected回调的写法,无需额外修改。

内容的提问来源于stack exchange,提问作者hakan-dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:18:05