如何创建一个rucursive超时函数

How to create a rucursive timeout function

本文关键字:一个 rucursive 超时 函数 创建 何创建      更新时间:2023-09-26

我正在尝试用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);
}

但不确定为什么不起作用。感谢您的帮助。

我对您的代码做了一些更改,使其在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

看起来有一条注释已经指出了最大的问题,因为您没有使用newTime变量,所以您总是将其设置为3500。

看到它在钢笔里工作。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);
}