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