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,然後快速點擊按鈕B.在這種情況下,代碼呈現按鈕A的輸出,而不是按鈕B.這是問題的原因...我想顯示最後一次點擊的結果。 – user2354898