我有一个“可取消”的 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);
}
};
});
});
});
问题:
如果存在 Internet连接问题,ajax 会以状态 0 失败,并且拦截器会捕获它。如果 ajax 被超时 promise取消,那么status 也是 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