У меня есть "аннулируемый" angularJs $http
вызов следующим образом:
var defer = $q.defer()
$http.post("http://example.com/someUrl", {some: "data"}, {timeout: defer.promise})
И я отменяю этот запрос ajax, используя defer.resolve()
, потому что это требует некоторая логика.
Где-то где-то в моем коде, у меня есть итератор вроде этого:
angular.module("services.interceptor", arguments).config(function($httpProvider) {
$httpProvider.interceptors.push(function($q) {
return {
responseError: function(rejection) {
if(rejection.status == 0) {
alert("check your connection");
}
return $q.reject(rejection);
}
};
});
});
});
Проблема:
Если есть проблема подключения к Интернету , ajax не работает со статусом 0, а перехватчик поймает его. Если ajax отменяется с помощью ожидания времени ожидания, чем статус также 0, а перехватчик поймает его.
Я не могу узнать, отменено или получено сообщение об ошибке в обработчике responseError
.
Мой наивный подход заключается в том, чтобы проверить, задан ли тайм-аут следующим образом:
responseError: function(rejection) {
if(rejection.status == 0 && !rejection.config.timeout) {
alert("check your connection");
}
return $q.reject(rejection);
}
Это только гарантирует, что есть условие таймаута для этого запроса, а не , из-за которого оно не получилось. Но это лучше, чем ничего.
Есть ли действительно эффективный способ определения того, был ли ajax поврежден или отменен?
Я использую AngularJs 1.1.5