嗨我有一个菜单,菜单中的每个按钮都会进行资源(REST)调用。我有一个案例,用户点击按钮A,然后快速点击按钮B.在这种情况下,我只想处理最后一个电话并忽略之前制作的所有其他电话。
我怎样才能做到这一点?
答案 0 :(得分:1)
创建资源时,在options对象中将cancellable
标志设置为true,可以取消挂起的请求。这样的事情应该有效(未经测试!):
var Resource = $resource('/myresource', null, null, { cancellable: true });
var pending = [];
function newRequest() {
// Cancel previous request
if (pending) pending.$cancelRequest();
// Make a new request
var result = Resource.get();
result.$promise.then(function(resource) {
pending = undefined; // Reset pending when a request was successful
return resource;
}
// Remember this for cancelling
pending = result;
}
$scope.buttonAClicked = function() {
newRequest();
// Whatever else you need to do here
}
$scope.buttonBClicked = function() {
newRequest();
}
您只需要确保无论何时发出请求,都会保存在待处理状态。如果这可能发生在多个地方,则可能必须使用数组。