2016-04-27 66 views
1

我使用$ httpProvider.interceptors來捕獲401或403請求,之後我結束會話並重定向到登錄頁面。有具有超時功能的功能,我想停止執行此超時,如果我得到一個401或403的響應

回答

-1

你需要保存定時器,像this

var myVar; 

function myFunction() { 
    myVar = setTimeout(function(){ alert("Hello"); }, 3000); 
} 

function myStopFunction() { 
    clearTimeout(myVar); 
} 
+0

這就是爲什麼我離開鏈接W3取消超時? – alexey

+0

我不知道爲什麼你認爲你需要突出顯示它 – alexey

+0

Downvoted是因爲這個問題顯然是關於角度的,所以不適合使用'setTimeout'。 – Duncan

0

你可以使用$timeout.cancel(timer)停止計時器。

在文檔中瞭解更多關於在這裏:​​ $timeout

+0

您應該在答案中提供一些背景和解釋,而不僅僅是文檔的鏈接。同時引用文件的相關部分,以防鏈接將來失效。請參閱http://stackoverflow.com/help/how-to-answer – Duncan

1

您可以比較容易地

var myTimeout = $timeout(function() {}, 1000); 
// Check http status code 
if (someHttpCode === 401){ 
    // Stop the timeout 
    $timeout.cancel(myTimeout); 
} 
+0

取消的能力不是「由於它返回承諾的事實」。一般來說,沒有辦法取消承諾,這是一個額外的功能添加到承諾的超時。 另外值得注意的是最近版本的angularjs不需要你傳遞一個空函數,你可以調用'$ timeout(1000)'來獲得承諾。 – Duncan

+0

@鄧肯感謝您的更正,我會記住 – Grant

+0

我知道我們可以通過將它保存在一個變量中來取消超時,我只是想知道是否有一個全局方法只需刷新所有待處理的超時一旦沒有將它保存在任何變量中 –