Подтвердить что ты не робот

Определить время запроса запроса в 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).

4b9b3361

Ответ 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% ситуаций.