我试图为我的角度网络应用程序实现一些离线支持,但我不能让我的简单重试功能工作。 我有以下代码的服务
constructor($http: ng.IHttpService, private $q: ng.IQService, private $interval: ng.IIntervalService, private $timeout: ng.ITimeoutService) {
this.httpService = $http;
}
getCategories(updatedFunction: Function) {
var deferred = this.$q.defer();
this.httpService.get('/api/listCategories')
.success((response) => {
deferred.resolve(response);
}).error(() => {
this.$timeout(() => this.getCategories(), 10000);
});
return deferred.promise;
}
在控制器上我有以下内容。
service.getCategories().then(c => {
//Stuff in here
});
如果我在线,该服务工作正常,我得到了预期的数据。但是,如果我在开始时离线,我开始收到" GET http://correct_looking_path/ ERR_FAILED,如果我执行js文件,我可以看到它运行this.httpService.get方法但是立即失败了.error()。 然后我连接,但我仍然得到相同的错误消息和模式。 httpService.get方法每10秒运行一次,但始终失败。
如果我刷新它可以工作。
答案 0 :(得分:1)
问题是你的.error()回调没有连接到你的延迟对象。您可能希望设置一个可选的TypeScript参数来传入延迟对象,以便链接递归调用。
getCategories(updatedFunction: Function, deferror?: angular.IDeferred<{}>) {
var deferred;
if (deferor) {
deferred = deferror;
} else {
deferred = this.$q.defer();
}
this.httpService.get('/api/listCategories')
.success((response) => {
deferred.resolve(response);
}).error(() => {
this.$timeout(() => this.getCategories(deffered), 10000);
});
return deferred.promise;
}
答案 1 :(得分:1)
我的问题是我的.appcache文件中的NETWORK:部分下没有我的api请求(/ api / listCategories)。 因此,它尝试使用一些不存在的缓存资源,而不是尝试发出真正的http请求。