@woogie0303/easyfetch
Version:
#### [한국어 버전](./README_KO.md)
53 lines (40 loc) • 1.33 kB
text/typescript
import {
EasyFetchRequestType,
EasyFetchResponse,
} from './types/easyFetch.type';
import type {
InterceptorArgs,
InterceptorCallbackType,
} from './types/interceptor.type';
class Interceptor {
requestCbArr: InterceptorArgs<'request'>[];
responseCbArr: InterceptorArgs<'response'>[];
constructor() {
this.requestCbArr = [];
this.responseCbArr = [];
}
request: InterceptorCallbackType<'request'> = (onFulfilled, onRejected) => {
this.requestCbArr.unshift([onFulfilled, onRejected]);
};
response: InterceptorCallbackType<'response'> = (onFulfilled, onRejected) => {
this.responseCbArr.push([onFulfilled, onRejected]);
};
async flushRequestInterceptors(initVal: Promise<EasyFetchRequestType>) {
const flushArr = this.requestCbArr;
let promiseInit = initVal;
for (let i = 0; i < flushArr.length; i++) {
promiseInit = promiseInit.then(...flushArr[i]);
}
return promiseInit;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
async flushResPonseInterceptors(initVal: Promise<EasyFetchResponse<any>>) {
const flushArr = this.responseCbArr;
let promiseInit = initVal;
for (let i = 0; i < flushArr.length; i++) {
promiseInit = promiseInit.then(...flushArr[i]);
}
return promiseInit;
}
}
export default Interceptor;