【发布时间】:2021-11-26 10:16:48
【问题描述】:
我想在我的 API 提取引发错误时显示错误消息,但这个错误实际上得到了满足,因此在额外的减速器中,被拒绝的部分根本不会被调用。
export const searchWeather = createAsyncThunk(
"weather/searchWeather",
async (apiAddress) => {
const response = await fetch(apiAddress);
const data = await response.json();
return data;
}
);
................................................................................
extraReducers: (builder) => {
builder
.addCase(searchWeather.pending, (state) => {
state.isLoading = true;
state.hasError = false;
})
.addCase(searchWeather.fulfilled, (state, action) => {
state.weather = action.payload;
state.isLoading = false;
state.hasError = false;
})
.addCase(searchWeather.rejected, (state) => {
state.isLoading = false;
state.hasError = true;
});
},
这样,即使我收到 404 错误,它仍然会得到满足而不是被拒绝。
我所做的是以这种方式在我的异步函数中包含Promise.reject():
export const searchWeather = createAsyncThunk(
"weather/searchWeather",
async (apiAddress) => {
const response = await fetch(apiAddress);
if (!response.ok) {
return Promise.reject();
}
const data = await response.json();
return data;
}
);
它确实可以毫无问题地工作,并显示我在其他地方定义的错误消息。
但我想知道这是否真的是正确的方法,或者是否有更好的解决方案。
【问题讨论】:
标签: javascript reactjs redux react-redux redux-toolkit