Skip to content
This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Commit 2535a74

Browse files
committed
feat: add the disableThrowResponseError option for return full response when api fails
1 parent 4c79b68 commit 2535a74

File tree

4 files changed

+39
-31
lines changed

4 files changed

+39
-31
lines changed

packages/console-utils/xconsole-service/src/interceptors/consoleInterceptor/response.ts

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { IError, IResponse, IResponseData } from '../../types';
33
import { ApiType } from '../../const/index';
44
import { AxiosResponse } from 'axios';
55

6-
76
const injectErrorPromptAdaptor = (error: IError, response: AxiosResponse) => {
87
error.response = response;
98
error.code = response.data?.code;
@@ -21,17 +20,14 @@ function consoleResponseInterceptor(
2120
): IResponse<IResponseData> {
2221
const {
2322
data: apiResponseData,
24-
config: { apiType, ignoreError, risk = {} },
23+
config: { apiType, ignoreError, disableThrowResponseError, risk = {} },
2524
} = response;
2625

2726
if (apiType === ApiType.custom) return response;
2827

29-
if (
30-
// Single api succeeded -> code 200, withFailedRequest undefined
31-
// Multi api succeeded -> code 200, withFailedRequest false
32-
apiResponseData.code === '200' &&
33-
apiResponseData.withFailedRequest !== true
34-
) {
28+
// Single api succeeded -> code 200, withFailedRequest undefined
29+
// Multi api succeeded -> code 200, withFailedRequest false
30+
if (apiResponseData.code === '200' && apiResponseData.withFailedRequest !== true ) {
3531
return response;
3632
}
3733

@@ -41,36 +37,29 @@ function consoleResponseInterceptor(
4137
return response;
4238
}
4339

44-
if (
45-
// Multi api with failed request
46-
apiResponseData.code === '200' &&
47-
apiResponseData.withFailedRequest === true
48-
) {
49-
const error: IError = new Error('Multi OpenAPI calls with failed request.');
50-
injectErrorPromptAdaptor(error, response);
51-
if (ignoreError !== true) {
52-
throw error;
53-
}
54-
return response;
40+
let error: IError = new Error('OpenAPI failed without a message.');
41+
42+
// Multi api with failed request
43+
if (apiResponseData.code === '200' && apiResponseData.withFailedRequest === true ) {
44+
error = new Error('Multi OpenAPI calls with failed request.');
5545
}
5646

47+
// Single api failed with an error message
5748
if (apiResponseData.message) {
58-
// Single api failed with an error message
59-
const error: IError = new Error(apiResponseData.message);
60-
injectErrorPromptAdaptor(error, response);
61-
if (ignoreError !== true) {
62-
throw error;
63-
}
64-
return response;
49+
error = new Error(apiResponseData.message);
6550
}
66-
// Single api failed without an error message
67-
const error: IError = new Error('OpenAPI failed without a message.');
51+
52+
// 适配 error-proxy
6853
injectErrorPromptAdaptor(error, response);
6954

70-
if (ignoreError !== true) {
55+
// 历史有个 ignoreError 的配置 已经被 deprecate 掉了,为了兼容历史逻辑。本身是 widget 里面给弹窗使用的
56+
// 新的参数都是 disableThrowResponseError, 在设置了 disableThrowResponseError 会不 throw error
57+
if (!disableThrowResponseError && ignoreError !== true) {
7158
throw error;
7259
}
7360

61+
response.config.rawResponseData = disableThrowResponseError;
62+
7463
return response;
7564
}
7665

packages/console-utils/xconsole-service/src/service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ const createDefaultService = <R, P>(requestInstance: AxiosInstance, product: str
7272
risk: opts.risk,
7373
} as AxiosRequestConfig);
7474

75-
return opts?.rawResponseData ? res.data : res.data.data;
75+
//@ts-ignore
76+
return res.config.rawResponseData ? res.data : res.data.data;
7677
};
7778
}
7879

packages/console-utils/xconsole-service/src/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export interface IOptions extends AxiosRequestConfig {
4545
mock?: boolean;
4646
region?: string;
4747
rawResponseData?: boolean;
48+
/**
49+
* 在请求失败的时候不 throw Error 而是直接返回请求对象
50+
*/
51+
disableThrowResponseError?: boolean;
4852
throwDoubleConfirmError?: boolean;
4953
}
5054

packages/console-utils/xconsole-service/stories/index.stories.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,21 @@ storiesOf('XConsole Service', module)
4545
})
4646
.add('createService', () => {
4747
useEffect(() => {
48-
createService('xxxx', 'test', {apiType: ApiType.open})({ xxxx:1 })
48+
(async () => {
49+
try {
50+
const a = await createService('xxxx', 'test', {apiType: ApiType.open, disableThrowResponseError: true})({ xxxx:1 })
51+
console.log('a', a)
52+
const b = await createService('xxxx', 'test', {apiType: ApiType.open, ignoreError: true})({ xxxx:1 })
53+
console.log('b', b)
54+
const c = await createService('ecs', 'DescribeInstances', {apiType: ApiType.open, rawResponseData: true})({ xxxx:1 })
55+
console.log('c', c)
56+
const e = await createService('ecs', 'DescribeInstances', {apiType: ApiType.open})({ xxxx:1 })
57+
console.log('e', e)
58+
await createService('xxxx', 'test', {apiType: ApiType.open})({ xxxx:1 })
59+
} catch (e) {
60+
console.error('d', e)
61+
}
62+
})()
4963
});
5064

5165
return <div></div>

0 commit comments

Comments
 (0)