簡體   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