2013-07-26 14 views
17

Wysyłam żądanie http za pomocą kątowego, jak poniżej.

$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 
    } 
}); 

Jak ustalić limit czasu?

Zaobserwowałem, że w tym przypadku otrzymano kod statusu "0". Czy można bezpiecznie sprawdzić status == 0 dla limitu czasu?

Należy pamiętać, że nie pytam o limit czasu żądania HTTP (kod statusu 408).

+1

Wiem tylko, że 'status === 0' nie ** nie ** symbolizuje limitu czasu To jest kod używany, gdy serwer nie robi. t reaguje poprawnym stanem HTTP lub nie odpowiada a wysoki. – Blackhole

+2

To także stan, w którym połączenie zostało przerwane. – Francisc

Odpowiedz

19

Zrobiłem go jak poniżej ...

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

Ładne obejście, ale czy sprawdzanie danych == null i status == 0 nie poprawi się w przypadku, gdy otrzymamy błąd tuż przed przekroczeniem limitu czasu, a następnie sprawdzenie w javaScript respTime będzie> = config.timeout? jeśli (dane == null && status == 0 && respTime> = config.timeout) –

6

Właśnie przeczytałem kod źródłowy. W kodzie źródłowym $httpBackend, xhr.ontimeout nie jest obsługiwane. Powinny wdrożyć xhr.ontimeout.

Niestety, obecnie Angularjs nie obsługuje obsługi czasu oczekiwania na http. :(

+2

kątowe obsługuje limit czasu http, problemem jest rozróżnienie limitu czasu na inne błędy związane z siecią. – Max

1

Według Angular's documentation parametr timeout jest wyrażona w milisekundach.

Więc ustawienie go na poziomie 1 ms, co jest bardzo niskie, prawdopodobnie spowoduje, że żądanie zakończy się niepowodzeniem w 99,9999% sytuacji:

+0

Dziękuję. Zaktualizowałem limit czasu w pytaniu. –

Powiązane problemy