javascript - 结合 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?
解决方案
编辑:这更符合您想要完成的目标。在您原来的情况下,您有两个问题 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)
推荐阅读
- java - 如何将文本发送到页面源中的富文本编辑器
- node.js - $lookup,$match 使用 nodejs 在 mongodb 中给出一个空数组
- angular - 使用 Angular 材料自动完成示例中的代码时出现 TypeError
- angular - Angular:当变量异步更改时视图不更新
- function - Unity 自定义编辑器窗口输入控件,用于反射确定的类型
- jquery - 分组 JSON 对象
- sql - 如何在 postgresql 中指定登录角色(用户)
- java - java 10 编译空指针异常
- mysql - 从 PL SQL 错误 ORA-28536 更新 mysql 表:处理异构服务初始化参数时出错
- algorithm - 正方形网格中的多边形