如何解决需要替换JavaScript sleep
| 我知道这很糟糕:function sleep(millis) {
var date = new Date();
var curDate = null;
do { curDate = new Date();
} while(curDate-date < millis);
}
EDIT:
function doSomethingQuickly(pixelData) {
// loads an external image,filling the entire screen
// overlays $pixelsData over image
}
但是我确实确实需要这种功能,因为doSomethingQuickly()返回的速度如此之快,而其他doSomethingQuickly()则必须等到之前的操作完成后才能运行。仅将它们全部解雇并等待结果处理它们将是灾难性的。
doSomethingQuicky();
sleep(500);
doSomethingQuicky();
sleep(500);
doSomethingQuicky();
sleep(500);
doSomethingQuicky();
sleep(500);
doSomethingQuicky();
sleep(500);
我的问题是,由于在JS中模拟睡眠不好,因此如何使用setTimeout()或其他更可接受的方法来实现相同目的
注意:这不在Web浏览器中
编辑:
您可以看到,如果它连续运行了5次没有睡觉,它会迅速显示最终图像,这时它应该做的是1)显示图像2)暂停5秒3)重复您可以看到如果它连续运行5次而没有睡眠睡眠时,它将迅速显示最终图像,当它应该做的是1)显示图像2)暂停5秒钟3)重复
解决方法
怎么样:
function sleep(ms,callback){
setTimeout(callback,ms);
}
//basic usage
while (someStoppingcondition){
sleep(500,doSomethingQuicky);
}
如果doSomethingQuicky
总是相同的功能,则setInterval
(请参阅其他答案)就足够了。确保不会永远运行,请使用clear[Interval/Timeout]
停止计时器。
如果您的问题是一个功能必须在下一个功能执行之前完成,则这可能是解决该问题的一种方式:
function firstRunner(arg1,arg2,/* ... argx*/,nextRunner){
//do things
//after things are done,run nextRunner
nextRunner();
}
,JavaScript是单线程的。 series7ѭ的任何序列都应顺序执行。
除非您在doSomethingQuicky();
中使用某些计时器功能。不知道此功能的作用,就很难建议。
,var interval = setInterval(doSomethingQuickly,500)
...
clearInterval(interval);
我不知道代码在做什么。 JavaScript是单线程的,因此您应该不会遇到任何问题。您也应该不睡觉,因为它只睡觉一个线程。
,使用睡眠来等待函数返回总是一个坏主意。如果慢速功能花费的时间比预期的长,该怎么办?关于闲置时间的时间性能问题呢?
请使用Promise:
// resolves immediatly to the string \'fast done\'
const fast = new Promise(resolve => resolve(\'fast done\'));
// resolves after 1 second to the string \'slow done\'
const slow = new Promise(resolve => setTimeout(() => resolve(\'slow done\'),1000));
// resolves after 1 second to the array [\'fast done\',\'slow done\'],then logs it for demo purposes
Promise.all([fast,slow]).then(console.log);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。