gpt4 book ai didi

javascript - 在 Angular 中使用 $q 实现如何循环 promise 直到成功?

转载 作者:行者123 更新时间:2023-11-29 19:44:04 26 4
gpt4 key购买 nike

根据我最近的其他问题,我正在尝试将数据持久保存到针对移动设备(不稳定连接)的 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;
}

Controller :

myService.addObject(myObject)
.then(function(message) {
console.log(message);
}, function(message) {
console.log(message);
});

我无法删除拒绝回调,因为没有它代码似乎无法执行,但一旦调用拒绝,它就会中断 setTimeout 循环。我如何强制重复 promise 直到成功回调?

最佳答案

这是 AngularJS service retry when promise is rejected 的正确答案形式

 this.addObject = function addObject(object) {
var counter = 0;
var deferred = $q.defer();

var httpConfig = {
method: 'POST',
url: 'http://api.foo.com/bar',
data: object
}

var doRequest = function() {
counter++;
var self = this,args = arguments;
$http(httpConfig).
success(function(data, status) {
deferred.resolve('Woohoo!');
}).
error(function(data, status) {
//just fail already, it's not working
if(counter > 5) {
return deferred.reject('Couldnt reach server this time...');
}

//this will re-call doRequest();
args.callee.apply(self);
});

}

doRequest();

return deferred.promise;
}

关于javascript - 在 Angular 中使用 $q 实现如何循环 promise 直到成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21146856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com