如何使用Angular的$资源取消正在进行的REST调用?

时间:2014-01-21 08:10:51

标签: javascript angularjs rest angular-resource

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

来自文档:

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

文档中定义的一个操作:

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

有没有人有一个工作示例显示如何使用此超时操作并承诺取消正在进行的请求?有可能吗?

2 个答案:

答案 0 :(得分:3)

我的代码示例:

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  
}

}

答案 1 :(得分:1)

是的,这是可能的。您必须创建一个defere并将promise设置为参数:

var timeoutPromise = $q.defer();

{timeout: timeoutPromise.promise}

然后你可以随时解决这个承诺:

timeoutPromise.resolve(); 

也应该可以致电$timeout.cancel(timeoutPromise)。什么应该等于timeoutPromise.reject()

$timeout $q