Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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返回结果仍然有效.

Example

大佬总结

以上是大佬教程为你收集整理的AngularJS Promise重试全部内容,希望文章能够帮你解决AngularJS Promise重试所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。