2016-05-08 33 views
1

提供一個菜單,其中菜單中的每個按鈕都會進行資源(REST)調用。如果用戶點擊按鈕A然後快速點擊按鈕B,在這種情況下,我只想處理最後一次調用並忽略之前所做的所有其他調用。AngularJS多資源調用,僅處理最後一個

我該如何做到這一點?

+0

但是,如果在點擊按鈕A之後呼叫已經到達服務器,該怎麼辦?你怎麼可能忽略它?你可以做的是在這種情況下忽略點擊按鈕B,但不能在A上,因爲它已經發送。 –

+0

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

你只需要確保,只要你提出請求,它將被保存在待處理中。如果這可能發生在多個地方,您可能不得不使用數組。