Skip to content

Commit 604f131

Browse files
committed
feat: AV.setRequestTimeout
1 parent c59fefc commit 604f131

File tree

5 files changed

+20
-3
lines changed

5 files changed

+20
-3
lines changed

src/av.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ AV._config = {
1313
useMasterKey: false,
1414
production: null,
1515
realtime: null,
16+
requestTimeout: null,
1617
};
1718

1819
// configs shared by all AV instances

src/init.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ AV._setServerURLs = (urls, disableAppRouter = true) => {
154154
}
155155
};
156156
/**
157-
* set server URLs for services.
157+
* Set server URLs for services.
158158
* @function AV.setServerURLs
159159
* @since 3.0.0
160160
* @param {String|ServerURLs} urls URLs for services. if a string was given, it will be applied for all services.
@@ -166,6 +166,17 @@ AV.keepErrorRawMessage = value => {
166166
AV._sharedConfig.keepErrorRawMessage = value;
167167
};
168168

169+
/**
170+
* Set a deadline for requests to complete.
171+
* Note that file upload requests are not affected.
172+
* @function AV.setRequestTimeout
173+
* @since 3.6.0
174+
* @param {number} ms
175+
*/
176+
AV.setRequestTimeout = ms => {
177+
AV._config.requestTimeout = ms;
178+
}
179+
169180
// backword compatible
170181
AV.initialize = AV.init;
171182

src/request.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,10 @@ const request = ({ service, version, method, path, query, data = {}, authOptions
119119
throw new Error('Not initialized');
120120
}
121121
AV._appRouter.refresh();
122+
const { requestTimeout: timeout } = AV._config;
122123
const url = createApiUrl({ service, path, version });
123124
return setHeaders(authOptions, signKey).then(
124-
headers => ajax({ method, url, query, data, headers })
125+
headers => ajax({ method, url, query, data, headers, timeout })
125126
.catch((error) => {
126127
let errorJSON = {
127128
code: error.code || -1,

src/utils/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const Promise = require('../promise');
77

88
let requestsCount = 0;
99

10-
const ajax = ({ method, url, query, data, headers = {}, onprogress }) => {
10+
const ajax = ({ method, url, query, data, headers = {}, onprogress, timeout }) => {
1111
const count = requestsCount++;
1212

1313
debugRequest(`request(${count})`, method, url, query, data, headers);
@@ -31,6 +31,9 @@ const ajax = ({ method, url, query, data, headers = {}, onprogress }) => {
3131
if (onprogress) {
3232
req.on('progress', onprogress);
3333
}
34+
if (timeout) {
35+
req.timeout(timeout);
36+
}
3437
req.end((err, res) => {
3538
if (err) {
3639
if (res) {

storage.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,7 @@ export function init(options: {
808808
}): void;
809809
export function setServerURLs(urls: string|ServerURLs): void;
810810
export function setProduction(production: boolean): void;
811+
export function setRequestTimeout(ms: number): void;
811812
export function parseJSON(json: any): Object|File|any;
812813
export function request(options: {
813814
method: string,

0 commit comments

Comments
 (0)