2016-05-08 3 views
1

こんにちはメニュー内の各ボタンがリソース(REST)呼び出しを行うメニュー。ユーザーがボタンAをクリックしてからボタンBをすばやくクリックする場合があります。この場合、前回の呼び出しを処理し、前に行ったすべての呼び出しを無視したいだけです。AngularJS複数のリソース呼び出し、最後のもののみを処理する

どうすればこの問題を解決できますか?

+0

しかし、ボタンAをクリックしてコールがすでにサーバーに届いている場合はどうなりますか?どのように無視することができますか?あなたができることは、この場合はボタンBのクリックを無視することですが、すでに送信されているため、Aでは実行できません。 –

+0

ユーザーがボタンAをクリックし、次にButtton Bを高速でクリックするとします。この場合、コードはボタンBではなくボタンAからの出力をレンダリングします。これは問題iveです...私は最後のクリックから結果を表示したい。 – 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(); 
} 

あなたはちょうどあなたが要求を行うたび、それは保留に保存されていることを確認する必要があります。これが複数の場所から発生する可能性がある場合は、配列を使用する必要があります。

関連する問題