首页 > 解决方案 > 结合 settimeout 和 label Loop 和 if 语句

问题描述

以下代码的工作方式如下

while循环>>带来a和b值>> settimeout>>通过if-condition检查值>>继续它为真,否则中断;

此代码与 settimeout 并不起作用:

var number = 0;

start_position: while (true) {
  setTimeout(function() {
    console.log("Anything you want to print");
    var a = Math.random();
    var b = Math.random();
  }, 1000)

  number++;

  if (a > b) continue start_position;
  break;
}

这段代码没有 settimeout 并且工作得很好:

var number = 0;

start_position: while (true) {
  console.log("Anything you want to print");
  var a = Math.random();
  var b = Math.random();
  number++;

  if (a > b) continue start_position;
  break;
}


This is another way I tried too:

     var counter = 0;
    var i = setInterval(function(){
       
       
    var a=Math.random();
    var b=Math.random();
    console.log("a:",a);
    console.log("b:",b);
       
        counter++;
        if(a<b || a=b) {
            clearInterval(i);
        }
    }, 200);
     

Please, any suggestions?

标签: javascriptloopsif-statementlabel

解决方案


编辑:这更符合您想要完成的目标。在您原来的情况下,您有两个问题 A)您正在检查的变量不在正确的函数范围内,B)setTimeout 函数被推入 javascript 中的事件循环中。由于javascript是单线程的,因此只有在主线程清晰时,Javascript才会运行推入事件循环的函数。但是,因为您有一个 while 循环,所以该 while 循环将继续运行,直到它遇到中断条件,永远不允许运行您的超时函数,所以它的 while 将永远运行,而超时函数将永远不会运行。这个解决方案将整个事情包装在一个 setInterval 中,setInterval 将定期运行,然后在这种情况下,当满足您的条件时会自行清除。

var number = 0;
var interval;

function clear() {
    if (interval !== undefined) {
        clearInterval(interval);
    }
    callFunctionYouWantToMoveTo();
}

interval = setInterval(function() {
    console.log("Anything you want to print");  
    a=Math.random();
    b=Math.random();

    number++;

    if (a>b) return;

    clear();
}, 1000)

推荐阅读