2016-04-27 1 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

@ Duncan Спасибо за исправление, я расскажу об этом – Grant

+0

Я знаю, что мы можем отменить тайм-аут, сохранив его в переменной, я просто хотел узнать, есть ли глобальный метод, который просто удаляет весь ожидающий тайм-аут в один раз, не сохраняя его в любой переменной –

Смежные вопросы