2014-01-21 52 views
4

我一直在反覆探討如何使用Angular的$資源取消正在進行的REST調用。我還沒有找到任何解決方案,但是從Angular文檔中我得到了應該有可能的印象。

從文檔:

使用: $資源(網址[,paramDefaults] [,行動]);

一個文檔中定義的所有操作:

超時 - {號|服務承諾} - 超時以毫秒爲單位,或已解決時,應中止請求承諾。

有沒有人有一個工作示例,顯示如何使用此超時操作並承諾取消正在進行的請求?可能嗎?

回答

1

是的,這是可能的。你必須創建一個defere並設置有希望成爲參數:

var timeoutPromise = $q.defer(); 

{timeout: timeoutPromise.promise} 

然後你就可以在任何時間解決的承諾:

timeoutPromise.resolve(); 

這也應該是可以調用$timeout.cancel(timeoutPromise)。什麼應該等於timeoutPromise.reject()

$timeout$q

+2

感謝您的快速回復。你指出了正確的方向。不過,我在我的$資源上放置工廠時會遇到麻煩,因爲它會多次使用。看起來超時配置只能在使用這種模式時初始化一次。我解決這個問題的方式是將$資源從服務中移出並放入控制器中,以便每次給我的休息服務打電話時都可以設置新的承諾。過了一段時間,我還決定從$ resource更改爲$ http。 – jstensen

3

我的代碼示例:

var canceler = {}; 
$scope.doSomething = function() { 
    canceler = $q.defer(); 
    $http.post('url', data, {timeout: canceler.promise}). 
    success(function(data) { 
    }). 
    error(function() { 
    }); 
}; 

function cancelPost() { 
    canceler.resolve(); //aborts request 
} 

}

相關問題