Skip to content

Commit 1dcbfda

Browse files
committed
Adding cancelable promise
1 parent 0d70638 commit 1dcbfda

File tree

13 files changed

+49
-12
lines changed

13 files changed

+49
-12
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"@types/qs": "6.9.6",
8585
"@typescript-eslint/eslint-plugin": "4.17.0",
8686
"@typescript-eslint/parser": "4.17.0",
87+
"abort-controller": "3.0.0",
8788
"codecov": "3.8.1",
8889
"eslint": "7.21.0",
8990
"eslint-config-prettier": "8.1.0",
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
export class CancelablePromise<T> extends Promise<T> {
2+
3+
constructor(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void) {
4+
super(executor);
5+
}
6+
7+
public cancel() {
8+
//
9+
}
10+
}

src/templates/core/fetch/request.hbs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +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';
67
import { OpenAPI } from './OpenAPI';
78

89
{{>functions/isDefined}}
@@ -53,9 +54,10 @@ import { OpenAPI } from './OpenAPI';
5354
* @returns ApiResult
5455
* @throws ApiError
5556
*/
56-
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
57+
export async function request(options: ApiRequestOptions): CancelablePromise<ApiResult> {
58+
const controller = new AbortController();
5759
const url = getUrl(options);
58-
const response = await sendRequest(options, url);
60+
const response = await sendRequest(options, url, controller.signal);
5961
const responseBody = await getResponseBody(response);
6062
const responseHeader = getResponseHeader(response, options.responseHeader);
6163

src/templates/core/fetch/sendRequest.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
async function sendRequest(options: ApiRequestOptions, url: string): Promise<Response> {
1+
async function sendRequest(options: ApiRequestOptions, url: string, signal: AbortSignal): Promise<Response> {
22
const request: RequestInit = {
33
method: options.method,
44
headers: await getHeaders(options),
55
body: getRequestBody(options),
6+
signal,
67
};
78
if (OpenAPI.WITH_CREDENTIALS) {
89
request.credentials = 'include';

src/templates/core/node/request.hbs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
{{>header}}
22

3+
import { AbortController, AbortSignal } from 'abort-controller';
34
import FormData from 'form-data';
45
import fetch, { BodyInit, Headers, RequestInit, Response } from 'node-fetch';
56
import { types } from 'util';
67

78
import { ApiError } from './ApiError';
89
import type { ApiRequestOptions } from './ApiRequestOptions';
910
import type { ApiResult } from './ApiResult';
11+
import type { CancelablePromise } from './CancelablePromise';
1012
import { OpenAPI } from './OpenAPI';
1113

1214
{{>functions/isDefined}}
@@ -57,9 +59,10 @@ import { OpenAPI } from './OpenAPI';
5759
* @returns ApiResult
5860
* @throws ApiError
5961
*/
60-
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
62+
export async function request(options: ApiRequestOptions): CancelablePromise<ApiResult> {
63+
const controller = new AbortController();
6164
const url = getUrl(options);
62-
const response = await sendRequest(options, url);
65+
const response = await sendRequest(options, url, controller.signal);
6366
const responseBody = await getResponseBody(response);
6467
const responseHeader = getResponseHeader(response, options.responseHeader);
6568

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
async function sendRequest(options: ApiRequestOptions, url: string): Promise<Response> {
1+
async function sendRequest(options: ApiRequestOptions, url: string, signal: AbortSignal): Promise<Response> {
22
const request: RequestInit = {
33
method: options.method,
44
headers: await getHeaders(options),
55
body: getRequestBody(options),
6+
signal,
67
};
78
return await fetch(url, request);
89
}

src/templates/core/xhr/request.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +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';
67
import { OpenAPI } from './OpenAPI';
78

89
{{>functions/isDefined}}
@@ -56,7 +57,7 @@ import { OpenAPI } from './OpenAPI';
5657
* @returns ApiResult
5758
* @throws ApiError
5859
*/
59-
export async function request(options: ApiRequestOptions): Promise<ApiResult> {
60+
export async function request(options: ApiRequestOptions): CancelablePromise<ApiResult> {
6061
const url = getUrl(options);
6162
const response = await sendRequest(options, url);
6263
const responseBody = getResponseBody(response);

src/templates/exportService.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import type { {{{this}}} } from '../models/{{{this}}}';
66
{{/each}}
77
{{/if}}
8+
import type { CancelablePromise } from '../core/CancelablePromise';
89
import { request as __request } from '../core/request';
910
{{#if @root.useVersion}}
1011
import { OpenAPI } from '../core/OpenAPI';
@@ -35,7 +36,7 @@ export class {{{name}}} {
3536
{{/each}}
3637
* @throws ApiError
3738
*/
38-
public static async {{{name}}}({{>parameters}}): Promise<{{>result}}> {
39+
public static async {{{name}}}({{>parameters}}): CancelablePromise<{{>result}}> {
3940
const result = await __request({
4041
method: '{{{method}}}',
4142
path: `{{{path}}}`,

src/templates/index.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{{#if @root.exportCore}}
33

44
export { ApiError } from './core/ApiError';
5+
export type { CancelablePromise } from './core/CancelablePromise';
56
export { OpenAPI } from './core/OpenAPI';
67
{{/if}}
78
{{#if @root.exportModels}}

src/utils/registerHandlebarTemplates.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import nodeGetResponseHeader from '../templates/core/node/getResponseHeader.hbs'
2828
import nodeRequest from '../templates/core/node/request.hbs';
2929
import nodeSendRequest from '../templates/core/node/sendRequest.hbs';
3030
import templateCoreSettings from '../templates/core/OpenAPI.hbs';
31+
import templateCancelablePromise from '../templates/core/CancelablePromise.hbs';
3132
import templateCoreRequest from '../templates/core/request.hbs';
3233
import xhrGetHeaders from '../templates/core/xhr/getHeaders.hbs';
3334
import xhrGetRequestBody from '../templates/core/xhr/getRequestBody.hbs';
@@ -80,6 +81,7 @@ export interface Templates {
8081
apiError: Handlebars.TemplateDelegate;
8182
apiRequestOptions: Handlebars.TemplateDelegate;
8283
apiResult: Handlebars.TemplateDelegate;
84+
cancelablePromise: Handlebars.TemplateDelegate;
8385
request: Handlebars.TemplateDelegate;
8486
};
8587
}
@@ -104,6 +106,7 @@ export function registerHandlebarTemplates(root: { httpClient: HttpClient; useOp
104106
apiError: Handlebars.template(templateCoreApiError),
105107
apiRequestOptions: Handlebars.template(templateCoreApiRequestOptions),
106108
apiResult: Handlebars.template(templateCoreApiResult),
109+
cancelablePromise: Handlebars.template(templateCancelablePromise),
107110
request: Handlebars.template(templateCoreRequest),
108111
},
109112
};

0 commit comments

Comments
 (0)