【问题标题】:How to cancel an ongoing REST-call using Angular's $resource?如何使用 Angular 的 $resource 取消正在进行的 REST 调用?
【发布时间】:2014-01-21 08:10:51
【问题描述】:

我一直在寻找有关如何使用 Angular 的 $resource 取消正在进行的 REST 调用的示例。我还没有找到任何解决方案,但从 Angular 文档中我得到的印象是它应该是可能的。

来自文档:

用法: $resource(url[, paramDefaults][, actions]);

文档中定义的操作之一:

timeout - {number|Promise} - 超时时间(以毫秒为单位),或承诺在解决时应中止请求。

有没有人有一个可行的例子来展示如何使用这个超时操作和承诺来取消正在进行的请求?有可能吗?

【问题讨论】:

    标签: javascript angularjs rest angular-resource


    【解决方案1】:

    我的代码示例:

    var canceler = {};
    $scope.doSomething = function() {
      canceler = $q.defer();
      $http.post('url', data, {timeout: canceler.promise}).
        success(function(data) {
        }).
        error(function() {
        });
    };
    
    function cancelPost() {
      canceler.resolve(); //aborts request  
    }
    

    }

    【讨论】:

      【解决方案2】:

      是的,这是可能的。您必须创建一个延迟并将承诺设置为参数:

      var timeoutPromise = $q.defer();
      
      {timeout: timeoutPromise.promise}
      

      那么你可以随时解决promise:

      timeoutPromise.resolve(); 
      

      也应该可以拨打$timeout.cancel(timeoutPromise)。应该等于timeoutPromise.reject()

      $timeout $q

      【讨论】:

      • 感谢您的快速回复。你给我指出了正确的方向。但是,我在 $resource 上应用超时时遇到了麻烦,该 $resource 放置在工厂中以供多次使用。使用此模式时,似乎超时配置只能初始化一次。我解决它的方法是将 $resource 从服务中移出并进入控制器,以便能够在每次调用我的休息服务时使用新的承诺设置超时。过了一会儿,我也决定从 $resource 改为 $http。
      猜你喜欢
      • 2013-08-18
      • 2014-11-24
      • 2020-09-27
      • 2012-01-16
      • 2011-03-12
      • 2021-10-30
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多