2

我是新來的角度,所以我需要詳細的解決這個問題。我看到很多答案,但不是根據我的情況。以角度取消資源請求

我有一個服務:

function ticketService($resource, globals) { 
     return $resource(globals.API_URL+'/tickets/:id', {id: '@id'}, { 
      update: {method: 'PUT'} 
     }); 
    } 

現在我需要在一個新的調用,以取消先前的呼叫。我如何在這裏使用timeout參數?

在控制器即時調用這樣的這項服務:

ticketService.get({group_by: type}, function(data) { 
. 
. 
. 
. 
}); 

我需要怎麼改變我的服務和控制器。

謝謝。

回答

3

這個例子是這個前面的Stackoverflow問題應該適用於你的問題。 $resource支持Angular爲其承諾系統提供的timeout功能。

How to cancel an $http request in AngularJS?

var canceller; 

function ticketService($resource, globals) { 
    canceller = $q.defer(); 

    return $resource(globals.API_URL + '/tickets/:id', { 
     timeout: canceller.promise, 
     id: '@id' 
    }, { 
     update: {method: 'PUT'} 
    }); 
} 

function cancelRequest() { 
    if (canceller) { 
     // You could also use a $timeout timer to cancel it 
     canceller.resolve('cancelled'); 
    } 
} 
+0

好吧。 一個問題我們如何使用cancelRequest()方法? – 2015-04-01 23:51:55

+0

這個方法可以在你的控制器的任何地方調用,你也可以將它添加到'$ scope'中,這樣UI就可以有一個'ng-click'來允許用戶取消請求。您也可以將'canceller'傳遞到'Service method'中以取消您的定製服務中的邏輯。很多選擇/路線去 – 2015-04-01 23:55:57

+0

沒錯。謝了哥們。 – 2015-04-01 23:56:44