大佬教程收集整理的这篇文章主要介绍了AngularJS Promise重试,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎遇到的问题是,在我的重试功能中,我正在调用另一个承诺,这就是检查条件的地方.我可以通过删除添加的承诺并在几次重试后创建默认成功条件来使代码按预期运行,但我无法弄清楚如何正确地将新的promise调用添加到函数中.
resource是一个返回$promise的Angular $资源的替身
我的代码如下:
resource.$promise.then(function (responsE) { return keepTrying(state,5); }).then(function (responsE) { }).catch(function (err) { console.log(err); });
而keepTrying功能:
function keepTrying(state,maxRetries,deferred) { deferred = deferred || $q.defer(); resource.$promise.then(function (responsE) { success = response; }); if (success) { return deferred.resolve(success); } else if (maxRetries > 0) { setTimeout(function () { keepTrying(state,maxRetries - 1,deferred); },1000); } else if (maxRetries === 0) { deferred.reject('Maximum retries exceeded'); } return deferred.promise; }
您需要做的是使用将(a)启动查询的函数,以及(b)返回该启动查询的承诺.像这样的东西:
function () { return $resource.get().$promise; }
然后你可以将它传递给这样的东西,这将进行重试.
function retryAction(action,numTries) { return $q.when() .then(action) .catch(function (error) { if (numTries <= 0) { throw error; } return retryAction(action,numTries - 1); }); }
这是你如何开始这个:
retryAction(function () { return $resource.get().$promise; },5) .then(function (result) { // do something with result });
关于这种方法的一个好处是,即使你传递给它的函数在调用它时抛出一个错误,或者根本没有返回一个promise,重试功能和通过一个已解决的promise返回结果仍然有效.
以上是大佬教程为你收集整理的AngularJS Promise重试全部内容,希望文章能够帮你解决AngularJS Promise重试所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。