setTimeout()函数运行没有延迟

时间:2018-04-07 02:20:44

标签: javascript jquery css recursion settimeout

我有一个程序,其中一个html按钮调用一个jQuery函数(称之为funcOne)。该函数反过来调用一个递归函数(称之为funcTwo)来改变DOM中的一些CSS。 funcTwo包含两个setTimeout()调用来延迟CSS更改,创建一种闪烁效果。

funcOne看起来像这样:

function funcOne(stringOfNumbers){

    //This function does some other stuff that does not interfere with funcTwo
    someUnrelatedFunction(); 

    funcTwo(time);

    return;
}

funcTwo看起来像这样:

function funcTwo(time){

    if(time == ""){return true;}

    var delay = time.charAt(0);
    var numDelay = parseInt(delay);

    setTimeout(function(){
        $("#container").css("background-color", "white");
        console.log("Changed to white");
    }, 1000); //Arbitrary delay

    setTimeout(function(){
        $("#container").css("background-color", "black");
        console.log("Changed to black");
    }, numDelay); //Variable delay

    time = time.substr(1);

    return funcTwo(time);

}

控制台显示两条消息,因此我知道脚本正在运行。我没有收到任何堆栈溢出错误。 但是,两个延迟(任意和可变)都不会运行。 #container立即变黑。

我做错了什么?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

我看到的一个问题是,在变为黑色之前允许的最大延迟是9毫秒。因为你给第二个变量延迟时间变量的第一个字符的值,最大的1个字符数是9.如果你希望首先将背景颜色运行为白色,我会移动第二个setTimeout()在第一个setTimeout()内,允许它只准备在背景为白色后运行。 setTimeout()已准备好,并且不会立即运行该功能。这允许在代码中,在实际运行函数之前运行setTimeout()之后的代码。

答案 1 :(得分:0)

Set Time setTimeout()有两个参数,第一个参数是一个回调函数,第二个参数是以毫秒为单位的timeInterval。所以在你的情况下你把它设置为1000秒,这是1秒。并在1秒后完全运行。

@Override
    public Optional<String> isUnuque(final Users user) {
        final Users dbUser = this.repository.findByEmailOrName(user.getEmail(), user.getName());
        if (dbUser != null) {
            if (user.getEmail().equals(dbUser.getEmail())) {
                return Optional.of("Not unique email");
            } else {
                return Optional.of("Not unique name");
            }
        }
        return Optional.empty();
    }
相关问题