Skip to content

Commit f9a73a0

Browse files
committed
- Working on cancelable api
1 parent 1dcbfda commit f9a73a0

File tree

8 files changed

+79
-74
lines changed

8 files changed

+79
-74
lines changed

src/templates/core/CancelablePromise.hbs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
export class CancelablePromise<T> extends Promise<T> {
22

3-
constructor(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void) {
3+
private readonly _cancel: (reason?: any) => void;
4+
5+
constructor(executor: (
6+
resolve: (value: T | PromiseLike<T>) => void,
7+
reject: () => void
8+
cancel: () => void
9+
) => void) {
410
super(executor);
511
}
612

src/templates/core/fetch/request.hbs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { ApiError } from './ApiError';
44
import type { ApiRequestOptions } from './ApiRequestOptions';
55
import type { ApiResult } from './ApiResult';
6-
import type { CancelablePromise } from './CancelablePromise';
6+
import { CancelablePromise } from './CancelablePromise';
77
import { OpenAPI } from './OpenAPI';
88

99
{{>functions/isDefined}}
@@ -51,24 +51,25 @@ import { OpenAPI } from './OpenAPI';
5151
/**
5252
* Request using fetch client
5353
* @param options The request options from the the service
54-
* @returns ApiResult
54+
* @returns CancelablePromise<T>
5555
* @throws ApiError
5656
*/
57-
export async function request(options: ApiRequestOptions): CancelablePromise<ApiResult> {
58-
const controller = new AbortController();
59-
const url = getUrl(options);
60-
const response = await sendRequest(options, url, controller.signal);
61-
const responseBody = await getResponseBody(response);
62-
const responseHeader = getResponseHeader(response, options.responseHeader);
63-
64-
const result: ApiResult = {
65-
url,
66-
ok: response.ok,
67-
status: response.status,
68-
statusText: response.statusText,
69-
body: responseHeader || responseBody,
70-
};
71-
72-
catchErrors(options, result);
73-
return result;
57+
export function request<T>(options: ApiRequestOptions): CancelablePromise<T> {
58+
return new CancelablePromise((resolve, reject, cancel) => {
59+
const controller = new AbortController();
60+
const url = getUrl(options);
61+
const response = await sendRequest(options, url, controller.signal);
62+
const responseBody = await getResponseBody(response);
63+
const responseHeader = getResponseHeader(response, options.responseHeader);
64+
65+
const result: ApiResult = {
66+
url,
67+
ok: response.ok,
68+
status: response.status,
69+
statusText: response.statusText,
70+
body: responseHeader || responseBody,
71+
};
72+
73+
catchErrors(options, result);
74+
});
7475
}

src/templates/core/node/request.hbs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { types } from 'util';
88
import { ApiError } from './ApiError';
99
import type { ApiRequestOptions } from './ApiRequestOptions';
1010
import type { ApiResult } from './ApiResult';
11-
import type { CancelablePromise } from './CancelablePromise';
11+
import { CancelablePromise } from './CancelablePromise';
1212
import { OpenAPI } from './OpenAPI';
1313

1414
{{>functions/isDefined}}
@@ -56,24 +56,25 @@ import { OpenAPI } from './OpenAPI';
5656
/**
5757
* Request using node-fetch client
5858
* @param options The request options from the the service
59-
* @returns ApiResult
59+
* @returns CancelablePromise<T>
6060
* @throws ApiError
6161
*/
62-
export async function request(options: ApiRequestOptions): CancelablePromise<ApiResult> {
63-
const controller = new AbortController();
64-
const url = getUrl(options);
65-
const response = await sendRequest(options, url, controller.signal);
66-
const responseBody = await getResponseBody(response);
67-
const responseHeader = getResponseHeader(response, options.responseHeader);
68-
69-
const result: ApiResult = {
70-
url,
71-
ok: response.ok,
72-
status: response.status,
73-
statusText: response.statusText,
74-
body: responseHeader || responseBody,
75-
};
76-
77-
catchErrors(options, result);
78-
return result;
62+
export function request<T>(options: ApiRequestOptions): CancelablePromise<T> {
63+
return new CancelablePromise((resolve, reject, cancel) => {
64+
const controller = new AbortController();
65+
const url = getUrl(options);
66+
const response = await sendRequest(options, url, controller.signal);
67+
const responseBody = await getResponseBody(response);
68+
const responseHeader = getResponseHeader(response, options.responseHeader);
69+
70+
const result: ApiResult = {
71+
url,
72+
ok: response.ok,
73+
status: response.status,
74+
statusText: response.statusText,
75+
body: responseHeader || responseBody,
76+
};
77+
78+
catchErrors(options, result);
79+
});
7980
}

src/templates/core/xhr/request.hbs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { ApiError } from './ApiError';
44
import type { ApiRequestOptions } from './ApiRequestOptions';
55
import type { ApiResult } from './ApiResult';
6-
import type { CancelablePromise } from './CancelablePromise';
6+
import { CancelablePromise } from './CancelablePromise';
77
import { OpenAPI } from './OpenAPI';
88

99
{{>functions/isDefined}}
@@ -54,23 +54,24 @@ import { OpenAPI } from './OpenAPI';
5454
/**
5555
* Request using XHR client
5656
* @param options The request options from the the service
57-
* @returns ApiResult
57+
* @returns CancelablePromise<T>
5858
* @throws ApiError
5959
*/
60-
export async function request(options: ApiRequestOptions): CancelablePromise<ApiResult> {
61-
const url = getUrl(options);
62-
const response = await sendRequest(options, url);
63-
const responseBody = getResponseBody(response);
64-
const responseHeader = getResponseHeader(response, options.responseHeader);
65-
66-
const result: ApiResult = {
67-
url,
68-
ok: isSuccess(response.status),
69-
status: response.status,
70-
statusText: response.statusText,
71-
body: responseHeader || responseBody,
72-
};
73-
74-
catchErrors(options, result);
75-
return result;
60+
export function request<T>(options: ApiRequestOptions): CancelablePromise<T> {
61+
return new CancelablePromise((resolve, reject, cancel) => {
62+
const url = getUrl(options);
63+
const response = await sendRequest(options, url);
64+
const responseBody = getResponseBody(response);
65+
const responseHeader = getResponseHeader(response, options.responseHeader);
66+
67+
const result: ApiResult = {
68+
url,
69+
ok: isSuccess(response.status),
70+
status: response.status,
71+
statusText: response.statusText,
72+
body: responseHeader || responseBody,
73+
};
74+
75+
catchErrors(options, result);
76+
});
7677
}

src/templates/core/xhr/sendRequest.hbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,7 @@ async function sendRequest(options: ApiRequestOptions, url: string): Promise<XML
1616
}
1717
};
1818
xhr.send(getRequestBody(options));
19+
20+
// xhr.abort();
1921
});
2022
}

src/templates/exportService.hbs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ export class {{{name}}} {
3636
{{/each}}
3737
* @throws ApiError
3838
*/
39-
public static async {{{name}}}({{>parameters}}): CancelablePromise<{{>result}}> {
40-
const result = await __request({
39+
public static {{{name}}}({{>parameters}}): CancelablePromise<{{>result}}> {
40+
return __request({
4141
method: '{{{method}}}',
4242
path: `{{{path}}}`,
4343
{{#if parametersCookie}}
@@ -82,7 +82,6 @@ export class {{{name}}} {
8282
},
8383
{{/if}}
8484
});
85-
return result.body;
8685
}
8786

8887
{{/each}}

src/utils/registerHandlebarTemplates.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { HttpClient } from '../HttpClient';
44
import templateCoreApiError from '../templates/core/ApiError.hbs';
55
import templateCoreApiRequestOptions from '../templates/core/ApiRequestOptions.hbs';
66
import templateCoreApiResult from '../templates/core/ApiResult.hbs';
7+
import templateCancelablePromise from '../templates/core/CancelablePromise.hbs';
78
import fetchGetHeaders from '../templates/core/fetch/getHeaders.hbs';
89
import fetchGetRequestBody from '../templates/core/fetch/getRequestBody.hbs';
910
import fetchGetResponseBody from '../templates/core/fetch/getResponseBody.hbs';
@@ -28,7 +29,6 @@ import nodeGetResponseHeader from '../templates/core/node/getResponseHeader.hbs'
2829
import nodeRequest from '../templates/core/node/request.hbs';
2930
import nodeSendRequest from '../templates/core/node/sendRequest.hbs';
3031
import templateCoreSettings from '../templates/core/OpenAPI.hbs';
31-
import templateCancelablePromise from '../templates/core/CancelablePromise.hbs';
3232
import templateCoreRequest from '../templates/core/request.hbs';
3333
import xhrGetHeaders from '../templates/core/xhr/getHeaders.hbs';
3434
import xhrGetRequestBody from '../templates/core/xhr/getRequestBody.hbs';

test/custom/request.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,17 @@
22
/* tslint:disable */
33
/* eslint-disable */
44
import type { ApiRequestOptions } from './ApiRequestOptions';
5-
import type { ApiResult } from './ApiResult';
5+
import { CancelablePromise } from './CancelablePromise';
66
import { OpenAPI } from './OpenAPI';
77

8-
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
8+
export function request<T>(options: ApiRequestOptions): CancelablePromise<T> {
9+
return new CancelablePromise((resolve, reject, cancel) => {
10+
const url = `${OpenAPI.BASE}${options.path}`;
911

10-
const url = `${OpenAPI.BASE}${options.path}`;
12+
// Do your request...
1113

12-
// Do your request...
13-
14-
return {
15-
url,
16-
ok: true,
17-
status: 200,
18-
statusText: 'dummy',
19-
body: {
14+
resolve({
2015
...options
21-
},
22-
};
16+
});
17+
});
2318
}

0 commit comments

Comments
 (0)