In the Angular $http
docs, it mentions that you can set the 'timeout' config to either a number or a promise.
timeout – {number|Promise} – timeout in milliseconds, or promise that should abort the request when resolved.
But I am not sure how to make this work using a promise. how do i set a number and a promise ? Basically I want to be able to know whether an http call (promise) errored due to a 'timeout' or something else. I need to be able to tell the difference. Thanks for any help !!!
if (timeout > 0) { var timeoutId = $browserDefer(timeoutRequest, timeout); } else if (timeout && timeout.then) { timeout.then(timeoutRequest); } function timeoutRequest() { status = ABORTED; jsonpDone && jsonpDone(); xhr && xhr.abort(); }
timeout.then(timeoutRequest)
means that when the promise is resolved (not rejected) timeoutRequest is invoked and xhr request is aborted.
If the request was timeout then reject.status === 0
(Note: in case of a network failure, then reject.status
will also be equals to 0), An example:
app.run(function($http, $q, $timeout){ var deferred = $q.defer(); $http.get('/path/to/api', { timeout: deferred.promise }) .then(function(){ // success handler },function(reject){ // error handler if(reject.status === 0) { // $http timeout } else { // response error status from server } }); $timeout(function() { deferred.resolve(); // this aborts the request! }, 1000); });
I had a sort a like question, you can check this link: Angular 1.5 timeout using a HttpInterceptor on how implement the timeout in an httpInterceptor. jsFiddle is included in the anwser. All credit go out to https://stackoverflow.com/users/3959997/mita for the answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With