Определить время запроса запроса в angular $http
Я отправляю http-запрос с использованием angular, как показано ниже.
$http({
url: url,
params: params,
method:'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
timeout: 60000 //60 seconds
}).success(function(data, status, headers, config) {
//do something
}).error(function(data, status, header, config) {
if(timedout){ //determine occurrence of timeout.
//invoke timeout handler
} else
//handle other error
}
});
Как определить тайм-аут?
Я заметил, что в этом случае получается код состояния "0". Безопасно ли проверять статус == 0 для тайм-аута?
Обратите внимание, что я не спрашиваю о тайм-ауте HTTP-запроса (код состояния 408).
Ответы
Ответ 1
Я сделал это, как показано ниже...
var startTime = new Date().getTime();
$http.post(...)
.success(function(resp, status, header, config) {...})
.error(function(resp, status, header, config) {
var respTime = new Date().getTime() - startTime;
if(respTime >= config.timeout){
//time out handeling
} else{
//other error hanndling
}
});
Ответ 2
Я просто прочитал исходный код. В исходном коде $httpBackend xhr.ontimeout
не обрабатывается. Они должны реализовать xhr.ontimeout
.
К сожалению, Angularjs не поддерживает обработку таймаута http прямо сейчас.: (
Ответ 3
Согласно Angular документации, параметр timeout
выражается в миллисекундах.
Итак, вы настраиваете его на 1 миллисекунду, что крайне мало. Вероятно, это приведет к сбою запроса в 99,9999% ситуаций.