1
提供一个菜单,其中菜单中的每个按钮都会进行资源(REST)调用。如果用户点击按钮A然后快速点击按钮B,在这种情况下,我只想处理最后一次调用并忽略之前所做的所有其他调用。AngularJS多资源调用,仅处理最后一个
我该如何做到这一点?
提供一个菜单,其中菜单中的每个按钮都会进行资源(REST)调用。如果用户点击按钮A然后快速点击按钮B,在这种情况下,我只想处理最后一次调用并忽略之前所做的所有其他调用。AngularJS多资源调用,仅处理最后一个
我该如何做到这一点?
当您创建资源时,在选项对象中将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();
}
你只需要确保,只要你提出请求,它将被保存在待处理中。如果这可能发生在多个地方,您可能不得不使用数组。
但是,如果在点击按钮A之后呼叫已经到达服务器,该怎么办?你怎么可能忽略它?你可以做的是在这种情况下忽略点击按钮B,但不能在A上,因为它已经发送。 –
可以让用户点击按钮A,然后快速点击按钮B.在这种情况下,代码呈现按钮A的输出,而不是按钮B.这是问题的原因...我想显示最后一次点击的结果。 – user2354898