AngularJS多个资源调用,只处理最后一个

时间:2016-05-08 12:40:26

标签: javascript angularjs angularjs-resource

嗨我有一个菜单,菜单中的每个按钮都会进行资源(REST)调用。我有一个案例,用户点击按钮A,然后快速点击按钮B.在这种情况下,我只想处理最后一个电话并忽略之前制作的所有其他电话。

我怎样才能做到这一点?

1 个答案:

答案 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();
}

您只需要确保无论何时发出请求,都会保存在待处理状态。如果这可能发生在多个地方,则可能必须使用数组。