【发布时间】:2014-02-04 11:29:33
【问题描述】:
根据我最近的其他问题,我正在尝试将针对移动设备(不稳定连接)的 Angular 应用程序的数据持久化到服务器,因此它应该继续尝试请求直到成功。
如何使用 Promise 做到这一点?
目前我有:
服务:
this.addObject = function addObject(object) {
var deferred = $q.defer();
var httpConfig = {
method: 'POST',
url: 'http://api.foo.com/bar',
data: object
}
setTimeout(function() {
$http(httpConfig).
success(function(data, status) {
deferred.resolve('Woohoo!');
}).
error(function(data, status) {
deferred.reject('Couldnt reach server this time...');
});
}, 3000);
return deferred.promise;
}
控制器:
myService.addObject(myObject)
.then(function(message) {
console.log(message);
}, function(message) {
console.log(message);
});
我无法删除拒绝回调,因为没有它,代码似乎无法执行,但是一旦调用了拒绝,它就会中断 setTimeout 循环。如何强制承诺重复直到成功回调?
【问题讨论】:
-
您的代码中没有循环。
-
@Adam - 你是因为我错误地将 setTimeout 描述为循环,还是我没有抓住重点?
-
@GruffBunny - 该问题中的代码不起作用,我是否认为我只需要调用该函数一次即可启动它?
-
@Anonymous:可能,请edit您的问题来修正这个术语。那个
setTimeout在那里用的是什么?
标签: javascript angularjs promise q