Javascript 如何使用while循环在控制台记录一个项目和另一个项目之间生成延迟?
我有以下代码,但它似乎不工作。我想登录到控制台“深绿色”,让它等待几毫秒,然后记录“浅绿色”,所有这些都不使用setInterval或setTimeout。这在javascript中是可能的吗Javascript 如何使用while循环在控制台记录一个项目和另一个项目之间生成延迟?,javascript,html,Javascript,Html,我有以下代码,但它似乎不工作。我想登录到控制台“深绿色”,让它等待几毫秒,然后记录“浅绿色”,所有这些都不使用setInterval或setTimeout。这在javascript中是可能的吗 function logGreen() { console.log("dark-green"); wait(200); console.log("light-green"); } function wait(ms) { var time = new Date(); var millisec
function logGreen() {
console.log("dark-green");
wait(200);
console.log("light-green");
}
function wait(ms) {
var time = new Date();
var milliseconds = time.getMilliseconds();
var startTime = milliseconds;
var currentTime = milliseconds;
while(currentTime - startTime < ms) {
currentTime = milliseconds;
}
}
函数logGreen(){
控制台日志(“深绿色”);
等待(200);
控制台日志(“浅绿色”);
}
函数等待(毫秒){
变量时间=新日期();
var millides=time.getmillides();
var startTime=毫秒;
var currentTime=毫秒;
同时(当前时间-开始时间<毫秒){
currentTime=毫秒;
}
}
我遇到的问题是,循环中断了浏览器,可以说,我不知道如何解决这个问题。对于for循环,有什么方法可以做到这一点吗?代码的问题是,在
循环时,currentTime的值没有在中正确更新
while
循环中的代码将无限期执行(无限循环),导致堆栈溢出-我假设这就是您所说的“中断浏览器”的意思。这是因为您的条件始终为真:startTime
和currentTime
是相同的值(currentTime-startTime<200
)
请尝试以下方法:
while(currentTime - startTime < ms) {
time = new Date();
currentTime = time.getTime();
}
while(当前时间-开始时间
创建一个新的日期对象并在循环中调用time.getTime()
,将返回最新的时间,应该可以解决您的问题。使用getTime()
而不是getmillizes()
,因为后者只返回0到999之间的数字(即不到一秒钟)。这个有限的上限范围对您的代码来说是有问题的,因为getMillicles()将只返回自上一秒以来经过的毫秒数。您可以将生成器作为延迟生成器。请看下面的例子。运行无限循环setInterval。您可以根据自己的用途修改代码
这在支持es6的浏览器和节点8.9.1LTS或更高版本上受支持
否setInterval
?否setTimeout
?允许您使用吗?您所说的“中断浏览器”是什么意思?window.setInterval
是一种更好的方法。我认为您正确地诊断了问题,但没有:调用getmillizes()
不返回最新时间。@Bergi已更正。OP也不能使用GetMillimes
,而应使用getTime
,否则,如果等待时间跨越第二个边界,这将失败。@Bergi我在这里学到的和OP一样多。是,使用getTime
,因为getmillizes
只返回0到999之间的数字。在这里。非常感谢,这很有效。我遇到了一个新问题,我想应用相同的逻辑,但是我不想在控制台上记录“深绿色”和“浅绿色”,而是想更改div的背景颜色。我在这里重新提出了这个问题:我想知道是否有人对我如何实现这一点有一些意见。
function* asyncRandomNumbers() {
let tm = new Date().getTime();
while (true) {
let updatedTm = new Date().getTime()
if(updatedTm - tm >= 1000){
tm = updatedTm;
yield tm;
}
}
}
for (var val of asyncRandomNumbers()) {
console.log(val) // outputs 0 — 9
}