2016-05-08 35 views
1

提供一个菜单,其中菜单中的每个按钮都会进行资源(REST)调用。如果用户点击按钮A然后快速点击按钮B,在这种情况下,我只想处理最后一次调用并忽略之前所做的所有其他调用。AngularJS多资源调用,仅处理最后一个

我该如何做到这一点?

+0

但是,如果在点击按钮A之后呼叫已经到达服务器,该怎么办?你怎么可能忽略它?你可以做的是在这种情况下忽略点击按钮B,但不能在A上,因为它已经发送。 –

+0

可以让用户点击按钮A,然后快速点击按钮B.在这种情况下,代码呈现按钮A的输出,而不是按钮B.这是问题的原因...我想显示最后一次点击的结果。 – user2354898

回答

1

当您创建资源时,在选项对象中将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(); 
} 

你只需要确保,只要你提出请求,它将被保存在待处理中。如果这可能发生在多个地方,您可能不得不使用数组。