Skip to content

Commit 71ed2e0

Browse files
authored
Merge pull request #2 from 1u0n/1u0n-patch-RequestTimeout
created new option to manage request timeouts
2 parents a3d96d6 + a5235ea commit 71ed2e0

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/autocomplete.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ interface Params {
2020
MinChars: number;
2121
QueryArg: string;
2222
Url: string;
23+
RequestTimeout: number;
24+
MaxTimeoutRetries: number;
2325

2426
// Keyboard mapping event
2527
KeyboardMappings: { [_: string]: MappingEvent };
@@ -125,6 +127,8 @@ class AutoComplete {
125127
HttpMethod: "GET",
126128
QueryArg: "q",
127129
Url: null,
130+
RequestTimeout: undefined,
131+
MaxTimeoutRetries: 3,
128132

129133
KeyboardMappings: {
130134
"Enter": {
@@ -608,7 +612,7 @@ class AutoComplete {
608612
}
609613
}
610614

611-
makeRequest(params: Params, callback: any, callbackErr: any): XMLHttpRequest {
615+
makeRequest(params: Params, callback: any, callbackErr: any, retryNumber:number): XMLHttpRequest {
612616
var propertyHttpHeaders: string[] = Object.getOwnPropertyNames(params.HttpHeaders),
613617
request: XMLHttpRequest = new XMLHttpRequest(),
614618
method: string = params._HttpMethod(),
@@ -625,6 +629,9 @@ class AutoComplete {
625629
}
626630

627631
request.open(method, url, true);
632+
633+
if (params.RequestTimeout && (retryNumber <= params.MaxTimeoutRetries))
634+
request.timeout = params.RequestTimeout;
628635

629636
for (var i = propertyHttpHeaders.length - 1; i >= 0; i--) {
630637
request.setRequestHeader(propertyHttpHeaders[i], params.HttpHeaders[propertyHttpHeaders[i]]);
@@ -639,6 +646,11 @@ class AutoComplete {
639646
callbackErr();
640647
}
641648
};
649+
650+
request.ontimeout = function() {
651+
var retryRequest = AutoComplete.prototype.makeRequest(params, callback, callbackErr, ++retryNumber);
652+
AutoComplete.prototype.ajax(params, retryRequest, false);
653+
};
642654

643655
return request;
644656
}
@@ -664,7 +676,7 @@ class AutoComplete {
664676
var response: string|undefined = params._Cache(params._Pre());
665677

666678
if (response === undefined) {
667-
var request: XMLHttpRequest = AutoComplete.prototype.makeRequest(params, callback, callbackErr);
679+
var request: XMLHttpRequest = AutoComplete.prototype.makeRequest(params, callback, callbackErr, 0);
668680

669681
AutoComplete.prototype.ajax(params, request);
670682
} else {

0 commit comments

Comments
 (0)