【问题标题】:AngularJS multiple resource call, handle last one onlyAngularJS 多资源调用,只处理最后一个
【发布时间】:2016-05-19 01:56:03
【问题描述】:

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

我怎样才能做到这一点?

【问题讨论】:

  • 但是如果点击按钮 A 后调用已经到达服务器怎么办?你怎么可能忽略它?在这种情况下,您可以做的是忽略对按钮 B 的点击,而不是在 A 上的点击,因为它已经发送。
  • 假设用户单击按钮 A,然后快速单击按钮 B。在这种情况下,代码呈现按钮 A 而不是按钮 B 的输出。这是我的问题...我想显示最后一次点击的结果。

标签: javascript angularjs angularjs-resource


【解决方案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();
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多