javascript - 防止 AngularJS $http 在超时时返回

标签 javascript angularjs

我正在做自定义 $http 服务,看起来像这样:

angular.factory('myHttp', function($http){
    var obj = {};

    obj.get = function(path) {
        return $http.get(path,{timeout: 5000}).error(function (result) {
                console.log("retrying");
                return obj.get(path);
        });
    }
});

系统运行良好。成功时返回数据,连接失败时重试。但是,我面临的问题是当连接超时时它会返回到 Controller 。如何防止它返回并继续重试?

最佳答案

您需要使用$q.reject。这将表明错误处理程序再次失败,结果应填充到父错误处理程序 - 而不是成功处理程序。

  obj.get = function(path) {
    return $http.get(path, {
      timeout: 5000
    }).then(null, function(result) {
      console.log("retrying");
      if (i < retry) {
        i += 1;
        return obj.get(path);
      } else {
        return $q.reject(result); // <-- use $q.reject
      }
    });
  }

参见plunker

关于javascript - 防止 AngularJS $http 在超时时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33541584/

相关文章:

angularjs - 如何使用 Protractor 每次在页面上单击同一类元素

javascript - 如何过滤显示的数组并重新显示过滤后的列表?

javascript - jQuery 比较两个 DOM 对象?

javascript - URL用正则表达式验证,缺少时添加 "http://"

javascript - Angularjs如何获取一周中的所有日期和日期

java - 单页应用。模板管理的安全性

javascript - $http 成功功能 block 中不可用的动态元素和范围变量

com - 需要有关 iTunes COM 持久 ID 的解释。将轨道传输到 iPod 时,轨道 ID 是否相同?

javascript - 如何像 Parse 那样声明回调?

javascript - 如何使 Foundation 5 顶部栏(导航栏)元素使用所有可用空间