feat: 添加新的 API isAxiosError
parent
7e29e91f0a
commit
61337a9bbe
|
@ -10,7 +10,6 @@ import {
|
|||
AxiosRequestFormData,
|
||||
AxiosRequestHeaders,
|
||||
AxiosResponse,
|
||||
AxiosResponseError,
|
||||
} from './core/Axios';
|
||||
|
||||
export type AxiosAdapterRequestType = 'request' | 'download' | 'upload';
|
||||
|
@ -267,7 +266,7 @@ export function createAdapter(platform: AxiosPlatform): AxiosAdapter {
|
|||
transformResult(response);
|
||||
config.success(response);
|
||||
},
|
||||
fail(error: AxiosResponseError): void {
|
||||
fail(error: AxiosAdapterResponseError): void {
|
||||
transformResult(error);
|
||||
config.fail(error);
|
||||
},
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { AxiosAdapter, createAdapter, AxiosPlatform } from './adapter';
|
||||
import { isString } from './helpers/isTypes';
|
||||
import Axios, {
|
||||
AxiosConstructor,
|
||||
AxiosRequestConfig,
|
||||
|
@ -6,8 +6,9 @@ import Axios, {
|
|||
AxiosResponse,
|
||||
} from './core/Axios';
|
||||
import { CancelToken, CancelTokenConstructor, isCancel } from './core/cancel';
|
||||
import { isAxiosError } from './core/createError';
|
||||
import { mergeConfig } from './core/mergeConfig';
|
||||
import { isString } from './helpers/isTypes';
|
||||
import { AxiosAdapter, createAdapter, AxiosPlatform } from './adapter';
|
||||
import defaults from './defaults';
|
||||
|
||||
export interface AxiosInstanceDefaults extends AxiosRequestHeaders {
|
||||
|
@ -27,7 +28,8 @@ export interface AxiosStatic extends AxiosInstance {
|
|||
CancelToken: CancelTokenConstructor;
|
||||
create(defaults?: AxiosRequestConfig): AxiosInstance;
|
||||
createAdapter(platform: AxiosPlatform): AxiosAdapter;
|
||||
isCancel(value: unknown): boolean;
|
||||
isCancel: typeof isCancel;
|
||||
isAxiosError: typeof isAxiosError;
|
||||
}
|
||||
|
||||
function createInstance(defaults: AxiosRequestConfig): AxiosInstance {
|
||||
|
@ -61,5 +63,6 @@ axios.create = function create(defaults: AxiosRequestConfig): AxiosInstance {
|
|||
};
|
||||
axios.createAdapter = createAdapter;
|
||||
axios.isCancel = isCancel;
|
||||
axios.isAxiosError = isAxiosError;
|
||||
|
||||
export default axios;
|
||||
|
|
|
@ -5,8 +5,8 @@ import {
|
|||
AxiosAdapterRequestMethod,
|
||||
AxiosAdapterTask,
|
||||
AxiosAdapterResponse,
|
||||
AxiosAdapterResponseError,
|
||||
AxiosAdapterRequestConfig,
|
||||
AxiosAdapterResponseError,
|
||||
} from '../adapter';
|
||||
import { CancelToken } from './cancel';
|
||||
import dispatchRequest from './dispatchRequest';
|
||||
|
@ -130,6 +130,7 @@ export interface AxiosResponse<TData = unknown>
|
|||
}
|
||||
|
||||
export interface AxiosResponseError extends AxiosAdapterResponseError {
|
||||
isFail: true;
|
||||
config?: AxiosRequestConfig;
|
||||
request?: AxiosAdapterTask;
|
||||
}
|
||||
|
|
|
@ -5,8 +5,6 @@ import { AxiosRequestConfig, AxiosResponse, AxiosResponseError } from './Axios';
|
|||
export type AxiosErrorResponse = AxiosResponse | AxiosResponseError;
|
||||
|
||||
class AxiosError extends Error {
|
||||
public isAxiosError = true;
|
||||
|
||||
public config: AxiosRequestConfig;
|
||||
|
||||
public request?: AxiosAdapterTask;
|
||||
|
@ -39,3 +37,7 @@ export function createError(
|
|||
cleanStack(axiosError);
|
||||
return axiosError;
|
||||
}
|
||||
|
||||
export function isAxiosError(value: unknown): value is AxiosError {
|
||||
return value instanceof AxiosError;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ import { assert } from '../helpers/error';
|
|||
import {
|
||||
AxiosAdapterRequestConfig,
|
||||
AxiosAdapterRequestMethod,
|
||||
AxiosAdapterResponse,
|
||||
AxiosAdapterResponseError,
|
||||
AxiosAdapterTask,
|
||||
} from '../adapter';
|
||||
import {
|
||||
|
@ -58,7 +60,8 @@ export function request<TData = unknown>(
|
|||
| AxiosAdapterTask
|
||||
| undefined;
|
||||
|
||||
function success(response: AxiosResponse<TData>): void {
|
||||
function success(_: AxiosAdapterResponse<TData>): void {
|
||||
const response = _ as AxiosResponse<TData>;
|
||||
response.config = config;
|
||||
response.request = adapterTask;
|
||||
if (
|
||||
|
@ -71,7 +74,9 @@ export function request<TData = unknown>(
|
|||
}
|
||||
}
|
||||
|
||||
function fail(error: AxiosResponseError): void {
|
||||
function fail(_: AxiosAdapterResponseError): void {
|
||||
const error = _ as AxiosResponseError;
|
||||
error.isFail = true;
|
||||
error.config = config;
|
||||
error.request = adapterTask;
|
||||
catchError('网络错误', error);
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import { describe, test, expect, beforeAll, afterAll } from 'vitest';
|
||||
import { mockAdapter } from 'scripts/test.utils';
|
||||
import Axios from '../src/core/Axios';
|
||||
import { CancelToken } from '../src/core/cancel';
|
||||
import { CancelToken, isCancel } from '../src/core/cancel';
|
||||
import { isAxiosError } from '../src/core/createError';
|
||||
import { createAdapter } from '../src/adapter';
|
||||
import defaults from '../src/defaults';
|
||||
import axios from '../src/axios';
|
||||
|
@ -24,11 +25,13 @@ describe('src/axios.ts', () => {
|
|||
expect(axios.Axios).toBe(Axios);
|
||||
expect(axios.CancelToken).toBe(CancelToken);
|
||||
expect(axios.createAdapter).toBe(createAdapter);
|
||||
expect(axios.isCancel).toBe(isCancel);
|
||||
expect(axios.isAxiosError).toBe(isAxiosError);
|
||||
|
||||
expect(axios.interceptors).toBeTypeOf('object');
|
||||
expect(axios.create).toBeTypeOf('function');
|
||||
expect(axios.request).toBeTypeOf('function');
|
||||
expect(axios.isCancel).toBeTypeOf('function');
|
||||
|
||||
expect(axios.getUri).toBeTypeOf('function');
|
||||
|
||||
[...Axios.as, ...Axios.pas, ...Axios.das].forEach((k) => {
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
import { describe, test, expect } from 'vitest';
|
||||
import { checkStack } from 'scripts/test.utils';
|
||||
import { createError } from 'src/core/createError';
|
||||
import { createError, isAxiosError } from 'src/core/createError';
|
||||
|
||||
describe('src/core/createError.ts', () => {
|
||||
test('应该支持空参数', () => {
|
||||
const c = {};
|
||||
const err = createError('error', c);
|
||||
|
||||
expect(err.isAxiosError).toBeTruthy();
|
||||
expect(err.message).toBe('error');
|
||||
expect(err.config).toBe(c);
|
||||
expect(checkStack(err)).toBeTruthy();
|
||||
|
@ -24,4 +23,10 @@ describe('src/core/createError.ts', () => {
|
|||
expect(err.request).toBe(req);
|
||||
expect(err.response).toBe(res);
|
||||
});
|
||||
|
||||
test('应该正确判断 AxiosError', () => {
|
||||
expect(isAxiosError(0)).toBeFalsy();
|
||||
expect(isAxiosError(new Error())).toBeFalsy();
|
||||
expect(isAxiosError(createError('error', {}))).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue