繁体   English   中英

如何在 while 循环中添加延迟。 JavaScript

[英]how to add a delay in a while loop. JavaScript

        function falling()
        {
            isFalling = true;

            while (isFalling == true)
            {

                if (y < 120) {

                    y++;

                }
                else if (y == 120) {
                    isFalling = false;

                }

            }

        }

我试过在整个循环、if 语句周围、y++ 周围添加 setTimeout(function()。我不知道我做错了什么。任何时候我添加任何这些时,一旦下降函数,页面就会变得无响应被调用。我很清楚这可能是一个重复的问题,但重复的问题没有帮助。{ }, 100)

你会这样做:

function falling(y) {
    if (y < 120) {
        setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
    }
}

falling(0);

这个问题确实已经回答过好几次了, 这里回答真的和这个没有太大区别。

请注意,我删除了明显的全局变量isFalling 如果您确实需要在其他代码中使用该变量,则可以按如下方式更新该变量:

function falling(y) {
    isFalling = y < 120;
    if (isFalling) {
        setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
    }
}

我会使用 window.setInterval() 代替,因为您希望它重复直到某个数字

工作plunkr:

https://plnkr.co/edit/TbpplnIShiaJR7sHDUjP?p=preview

function falling()
    {
        var isFalling = true; 
        var y=0;
        myInterval = window.setInterval(function() {
          y++;
          console.log(y);
          if (y== 120) {
            clearInterval(myInterval);
          }
        }, 100)
    }

falling();

如果调用falling()的目的是暂时将全局变量的值设置为true (如您当前的代码所建议的那样),那么这应该可以解决问题。

 var isFalling = false; function falling(fallDuration) { isFalling = true; console.log("now falling"); setTimeout(function(){ isFalling = false; console.log("landed"); }, fallDuration || 1000); } falling();

我想虽然你可能真的想跌倒然后继续做其他事情。 在这种情况下,您可能想要查看回调或承诺。 你可以做一个简单的:

 var isFalling = false; function falling(fallDuration, andThen) { isFalling = true; console.log("now falling"); setTimeout(function() { isFalling = false; console.log("landed"); andThen(); }, fallDuration); } falling(1000, function(){ console.log("now standing"); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM