[英]Is it possible to use an external axios handler with createAsyncThunk
I have a API handler with different functions using Axios for get, post, patch, etc. I want to use those API handler with createAsyncThunk from redux toolkit, is this possible?我有一个具有不同功能的 API 处理程序,使用 Axios 进行获取、发布、补丁等。我想将这些 API 处理程序与 redux 工具包中的 createAsyncThunk 一起使用,这可能吗?
it would be something like它会像
export const paymentMethods = createAsyncThunk(
'tenants/payments',
async (ppp: any, { dispatch, getState }) => {
const x = await postRequest(
`${API.TENANTS}/${ppp.tenantId}/${API.PAYMENT_METHODS}`,
response => console.log(response),
ppp.data,
);
return x.data;
},
);
The thing here is that createAsyncThunk handles rejected, fulfilled and pending response promises but if I use this configuration it will always return fulfilled even though the call actually fails.这里的问题是 createAsyncThunk 处理被拒绝、已完成和待处理的响应承诺,但如果我使用此配置,即使调用实际上失败,它也会始终返回已完成。
You can use unwrap
function to make createAsyncThunk
return errors in the catch
statement.您可以使用unwrap
函数使createAsyncThunk
在catch
语句中返回错误。 Check the following example.检查以下示例。
Without unwrap()
:没有unwrap()
:
dispatch(paymentMethods())
// By default, dispatching asyncThunks never results in errors (errors are just saved at redux)
.then((result) => {
/*
Here you can access the result (success or error) of the asyncThunk.
If we don't use 'unwrap', error (if happens) will be returned here as:
{
error: {name: "AxiosError", message: "Request failed with status code 401", code: "ERR_BAD_REQUEST"}
meta: {arg: {…}, requestId: "3eIa5l0L3J12ADFrkxirt", rejectedWithValue: false, requestStatus: "rejected", aborted: false, …}
payload: undefined
type: "tenants/payments/rejected"
}
*/
console.log(`PaymentMethods result (success or error): `, result)
})
.catch((error) => {
// This WILL NEVER be reached
})
With unwrap()
:使用unwrap()
:
dispatch(paymentMethods())
// Using 'unwrap', the internal logic of the reducer doesnt change.
// But you can access the error in the 'catch' statement.
.unwrap()
.then((result) => {
// Here you can access the success result of the asyncThunk.
console.log(`PaymentMethods result (success): `, result)
})
.catch((error) => {
/*
Here you can access the error result of the asyncThunk. Example:
{
code: "ERR_BAD_REQUEST"
message: "Request failed with status code 401"
name: "AxiosError"
}
*/
console.log(`PaymentMethods result (error): `, error)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.