feat(http-client): support async beforeRequest interceptors

This commit is contained in:
Ali BARIN
2024-07-27 13:02:00 +00:00
parent 52c0c5e0c5
commit be4493710f
3 changed files with 9 additions and 8 deletions

View File

@@ -54,12 +54,14 @@ export function createInstance(customConfig = {}, { requestInterceptor, response
// not always we have custom request interceptors
if (requestInterceptor) {
instance.interceptors.request.use(
function customInterceptor(requestConfig) {
const result = requestInterceptor.reduce((newConfig, requestInterceptor) => {
return requestInterceptor(newConfig);
}, requestConfig);
async function customInterceptor(requestConfig) {
let newRequestConfig = requestConfig;
return result;
for (const interceptor of requestInterceptor) {
newRequestConfig = await interceptor(newRequestConfig);
}
return newRequestConfig;
}
);
}
@@ -84,7 +86,6 @@ export function createInstance(customConfig = {}, { requestInterceptor, response
(error) => Promise.reject(error)
);
// not always we have custom response error interceptor
if (responseErrorInterceptor) {
instance.interceptors.response.use(

View File

@@ -141,7 +141,7 @@ describe('Custom default axios with proxy', () => {
const customInterceptor = requestInterceptors[1].fulfilled;
expect(requestInterceptors.length).toBe(3);
expect(customInterceptor({})).toStrictEqual({ test: true });
await expect(customInterceptor({})).resolves.toStrictEqual({ test: true });
});
it('should work with a custom interceptor setting a baseURL and a request to path', async () => {

View File

@@ -33,7 +33,7 @@ export default function createHttpClient({ $, baseURL, beforeRequest = [] }) {
},
{
requestInterceptor: beforeRequest.map((originalBeforeRequest) => {
return (requestConfig) => originalBeforeRequest($, requestConfig);
return async (requestConfig) => await originalBeforeRequest($, requestConfig);
}),
responseErrorInterceptor: interceptResponseError,
}