2014-09-11 64 views
0

我想用JavaScript構建遞歸超時函數。該函數應該遞歸運行直到它完成,每當條件不滿足時將超時乘以1.5。如何創建遞歸超時函數

到目前爲止,這是我所擁有的,但它不工作atm。不知道我做錯了什麼。

var condition; 

function doSomething(arg) 
{ 
    if (window.condition === true) 
    { 
     recursiveTimeout(arg, 3500); 
    } 
    else 
    { 
     doSomethingElse(arg); 
    } 
} 

function recursiveTimeout(arg, time) 
{ 
    setTimeout(function(){ 
     if (window.condition === true) 
      { 
      var newTime = (time * 1.5); 
      recursiveTimeout(arg, time); 
      } 
      else 
      { 
      doSomethingElse(arg); 
      } 
    }, time); 
} 

不知道爲什麼這不工作。任何幫助表示讚賞。

+3

last recursiveTimeout(arg,time);這不應該是新的時間? – 2014-09-11 13:16:07

回答

0

我已經改變了你的代碼有點爲它在的jsfiddle運行:

var condition = true; 

function doSomething(arg) 
{ 
    if (condition === true) 
    { 
     recursiveTimeout(arg, 100); 
    } 
    else 
    { 
     doSomethingElse(arg); 
    } 
} 

function doSomethingElse(arg){ 
    console.log("Doing something else" + arg); 
} 

function recursiveTimeout(arg, time) 
{ 
    console.log("Recursive waiting" + time); 
    setTimeout(function(){ 
     if (condition === true) 
     { 
      var newTime = (time * 1.5); 
      if (newTime > 2000) condition = false; 
      recursiveTimeout(arg, newTime); 
     } 
     else 
     { 
      doSomethingElse(arg); 
     } 
    }, time); 
} 

doSomething("x"); 

Fiddle

0

貌似已經叫了最大的問題,你總是它,因爲設置爲3500評論你沒有使用newTime變量。

看到它在這裏工作筆。 http://codepen.io/justindunham/pen/tvnKz

var recursiveTimeout = function(arg, time) { 
    console.log('recursiveTimeout(' + time + ')'); 
    timeout = setTimeout(function(){ 
     if (window.condition == true) { 
      var newTime = (time * 1.5); 
      recursiveTimeout(arg, newTime); 
      } 
      else { 
      doSomethingElse(arg); 
      } 
    }, time); 
}