本文介绍了当承诺被拒绝时,AngularJS 服务重试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从控制器内部的异步服务中获取数据,如下所示:

I'm getting data from an async service inside my controller like this:

myApp.controller('myController', ['$scope', 'AsyncService',
function($scope, AsyncService) {
    $scope.getData = function(query) {
        return AsyncService.query(query).then(function(response) {
            // Got success response, return promise
            return response;
        }, function(reason) {
            // Got error, query again in one second
            // ???
        });
    }
}]);

我的问题:

  1. 当我从服务中得到错误而不返回承诺时如何再次查询服务.
  2. 在我的服务中这样做会更好吗?

谢谢!

推荐答案

您可以在服务本身而不是控制器中重试请求.

You can retry the request in the service itself, not the controller.

所以,AsyncService.query 可以是这样的:

So, AsyncService.query can be something like:

AsyncService.query = function() {
  var counter = 0
  var queryResults = $q.defer()

  function doQuery() {
    $http({method: 'GET', url: 'https://example.com'})
      .success(function(body) {
        queryResults.resolve(body)
      })
      .error(function() {
        if (counter < 3) {
          doQuery()
          counter++
        }
      })
  }

  return queryResults.promise
}

你可以在控制器中去掉你的错误函数:

And you can get rid of your error function in the controller:

myApp.controller('myController', ['$scope', 'AsyncService',
  function($scope, AsyncService) {
    $scope.getData = function(query) {
      return AsyncService.query(query).then(function(response) {
        // Got success response
        return response;
      });
    }
  }
]);

这篇关于当承诺被拒绝时,AngularJS 服务重试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-24 13:20