Redux Toolkit 的 createAsyncThunk 从不发送被拒绝的操作

Redux Toolkit's createAsyncThunk never dispatches rejected action

我正在使用 Redux Toolkit 的 createAsyncThunkAxios 进行异步请求。 似乎拒绝的操作从未被调度,即使我输入了一个明显错误的 URL(应该 return 404)作为端点。我知道 Whosebug 中有很多与此相关的问题,但肯定有一些我无法掌握的东西,因为我已经好几个小时没能解决这个问题了。

这是我的 Redux 切片文件:

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import axios from "axios";

const name = "listings";
const initialState = {
  data: [],
  loading: false,
  error: null
};

export const fetchListings = createAsyncThunk(
  "listings/requestStatus",
  async () => {
    const response = await axios.get(
      "lorem-ipsum-dolor-sit-amet"
      //"https://jsonplaceholder.typicode.com/todos"
    );
    return response.data;
  }
);

const slice = createSlice({
  name,
  initialState,
  extraReducers: (builder) => {
    builder.addCase(fetchListings.pending, (state) => {
      console.log("pending");
      state.data = [];
      state.loading = true;
      state.error = null;
    });
    builder.addCase(fetchListings.fulfilled, (state, action) => {
      console.log("fulfilled");
      state.data = action.payload;
      state.loading = false;
      state.error = null;
    });
    builder.addCase(fetchListings.rejected, (state, action) => {
      console.error("rejected");
      state.data = [];
      state.loading = false;
      state.error = action.error.message;
    });
  }
});

export const selectListings = (state) => ({
  data: state[name].data,
  loading: state[name].loading,
  error: state[name].error
});
export default slice.reducer;

我尝试 try/catch Axios 调用并使用 rejectWithValue 助手,但似乎没有任何改变。这是一个codesandbox to replicate the issue。 Redux 切片位于 store/listings 并导致组件 src/Listings 失败。

如果您删除 lorem-ipsum... 错误的 uri 并取消注释 jsonplaceholder 端点,您可以轻松地看到一切正常。故意使用错误的 uri 来触发 404 错误并获得已调度的拒绝操作,不幸的是,这根本没有发生。

我认为你的测试有问题url。

我在这里分叉:https://codesandbox.io/s/youthful-napier-6s51m

使用保证 404 响应的服务似乎都有效:https://mock.codes/404

所以,fetchListings.rejected个案例被执行了。