无法让 redux 工具包与异步一起工作(createAsyncThunk)

cant get redux toolkit to work with async (createAsyncThunk)

Whosebug 的朋友们您好。我开始使用 redux 工具包,有些东西我不会。

我有这个切片:

const envSlice = createSlice({
  name: "env",
  initialState: { envs: [], loading: false, error: false },
  reducers: {},
  extraReducers: {
    [fetchEnv.pending]: (state) => {
      state.loading = true;
    },
    [fetchEnv.fulfilled]: (state, action) => {
      state.envs = action.payload;
      state.loading = false;
    },
    [fetchEnv.rejected]: (state) => {
      state.loading = false;
      state.error = true;
    },
  },
});

export default envSlice.reducer; 

我正在尝试从 mongo 服务器获取一些数据。此代码用于在常规 redux 中工作:

--- fetching all the envs ---

export const fetchEnv = createAsyncThunk("admin/fetchEnv", (thunkAPI) => {
  axios
    .get("http://10.0.0.6:5000/admin/getAllEnv")
    .then((response) => response.data)
    .catch((error) => {
      console.log(error);
      return thunkAPI.RejectWithValue(error);
    });
});

但出于某种原因,它总是进入捕获并拒绝 - 即使这是一个响应。

此代码有效:

export const fetchEnv = createAsyncThunk(
  "admin/fetchEnv",
  async (_, thunkAPI) => {
    try {
      const response = await axios.get("http://10.0.0.6:5000/admin/getAllEnv");
      return response.data;
    } catch (error) {
      return thunkAPI.rejectWithValue({ error: error.message });
    }
  }
);

我的问题是我完成了这项工作,但我不明白为什么第一个 createAsyncThunk 不起作用,为什么第二个 createAsyncThunk 起作用。

对我来说,这两个函数看起来有点相同。

这是 RTK 文档中的一个示例(出于某种原因,他们没有在这个示例中介绍错误处理,我没有找到):

谢谢 (: .

来自documentation

and a callback function that should return a promise

你的异步 thunk 不工作没有返回任何东西:

export const fetchEnv = createAsyncThunk("admin/fetchEnv", (thunkAPI) => {
  return axios //<----return a promise
    .get("http://10.0.0.6:5000/admin/getAllEnv")
    .then((response) => response.data)
    .catch((error) => {
      console.log(error);
      return thunkAPI.RejectWithValue(error);
    });
});

或者你可以有无形箭头功能:

export const fetchEnv = createAsyncThunk(
  'admin/fetchEnv',
  (
    thunkAPI 
  ) => //no { or }
    axios
      .get('http://10.0.0.6:5000/admin/getAllEnv')
      .then((response) => response.data)
      .catch((error) => {
        console.log(error);
        return thunkAPI.RejectWithValue(error);
      })
);