AngularJS - 在一定时间后显示POST请求的超时消息

时间:2017-02-21 21:51:43

标签: angularjs post

我正在尝试下面的代码,以便在POST请求的特定时间后显示超时消息

$scope.timeout = false;  
$scope.testAPICall = function(){

  $http({
    url: 'http://samedomain.com/GetPersons',
    method: "POST",
    data: postData
  })
  .success(function (data, status, headers, config) {
    $scope.timeout = true;
    $scope.persons = data; 
   })
  .error(function (data, status, headers, config) {
    $scope.status = status;
  });
}  

$timeout(testAPICall,1000) //for testing I kept 1000ms
if(!timeoutTest){
  alert("Timeout!!!");
}

问题是我正在尝试使用能够在135毫秒内提供响应时间的API,并且为了增加功能,我为长时间运行的请求添加了超时消息

1 个答案:

答案 0 :(得分:0)

您可以使用$q提供商来帮助解决此问题:

$scope.testApiCall = function() {
  var deferred = $q.defer();

  $timeout(function() {
    deferred.reject("Timed out!");
  }, 1000);

  $http({
    url: 'http://samedomain.com/GetPersons',
    method: "POST",
    data: postData
  })
  .success(function (data, status, headers, config) {
    deferred.resolve(data);
   })
  .error(function (data, status, headers, config) {
    deferred.reject(status);
  });

  return deferred.promise;

};

//Call function like this

$scope.testApiCall().then(function(data) {
  $scope.persons = data.persons;
})
.catch(function(status) {
  $scope.status = status;
});

如果达到时限,承诺将被拒绝,否则它将正常工作。