2013-08-02 4 views
0

У меня есть этот метод яваскрипта:Максимальный размер стека превышен

function waitcheck(){ 
     if(wait == 0){ 
      offlineUpload() 
     } 
     else{ 
      setTimeout(waitcheck(), 2000) 
     } 
    } 

Я заблудился, сейчас я получаю сообщение об ошибке говорящее «Максимальный размер стека превышен»

Целью данного метода является то, дождаться, пока переменная var превратится в «0» с помощью функции async.

Есть ли лучший способ сделать это?
Как я могу обойти эту ошибку?

ответ

3

Вы вызываете функцию waitcheck рекурсивно, вместо передачи функции в setTimeout.

сделать это в else:

setTimeout(waitcheck, 2000) 

Предполагая, что ваш wait глобальный правильно установлен вне этой функции, ваш код должен работать.

+0

Это правильно. Полностью прикрутил мой код (точки с запятой и(), где этого не должно быть). Спасибо –

0

Удалите круглые скобки имени функции. (Они вызывает эту функцию, чтобы называться, вместо того, чтобы передать его в качестве примера.)

Как так:

function waitcheck(){ 
     if(wait == 0){ 
      offlineUpload() 
     } 
     else{ 
      setTimeout(waitcheck, 2000) 
     } 
    } 
+0

Это правильно. Полностью прикрутил мой код (точки с запятой и(), где этого не должно быть). благодаря –

0

Это хрестоматийный пример где использовать setInterval

Это будет выполнять ваша контрольная функция каждые 2 секунды и остановка при ожидании 0.

var interval = setInterval(function() { 
    if(wait === 0){ 
    clearInterval(interval); 
    offlineUpload(); 
    } 
}, 2000); 
Смежные вопросы