有没有比下面的函数(从这里获取)更好的方法来设计JavaScript?sleep
pausecomp
function pausecomp(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
这不是 JavaScript 中睡眠的副本——操作之间的延迟;我希望在函数中间有一个真正的睡眠,而不是一段代码执行之前的延迟。
网友回答:
(请参阅2016年更新的答案)
我认为想要执行一个操作,等待,然后执行另一个操作是完全合理的。如果您习惯于用多线程语言编写,您可能会想到在一定时间内执行,直到线程唤醒。
这里的问题是JavaScript是一个基于单线程事件的模型。虽然在特定情况下,让整个引擎等待几秒钟可能会很好,但一般来说,这是不好的做法。假设我想在编写自己的函数时使用您的函数?当我调用你的方法时,我的方法都会冻结。如果 JavaScript 可以以某种方式保留函数的执行上下文,将其存储在某个地方,然后将其带回并稍后继续,那么睡眠可能会发生,但这基本上是线程。
所以你几乎被其他人的建议所困扰——你需要将你的代码分解成多个函数。
那么,你的问题有点错误。没有办法以你想要的方式睡觉,你也不应该追求你建议的解决方案。
网友回答:
自 2009 年提出这个问题以来,JavaScript 已经有了很大的发展。所有其他答案现在都已经过时或过于复杂。以下是当前的最佳实践:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
或者作为单行:
await new Promise(r => setTimeout(r, 2000));
作为一个函数:
const sleep = ms => new Promise(r => setTimeout(r, ms));
或在打字稿中:
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
将其用作:
await sleep(<duration>);
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function demo() {
for (let i = 0; i < 5; i++) {
console.log(`Waiting ${i} seconds...`);
await sleep(i * 1000);
}
console.log('Done');
}
demo();
请注意,
await
只能在以关键字为前缀的函数中执行,或者在越来越多的环境中在脚本的顶层执行。async
await
仅暂停当前函数。这意味着它不会阻止脚本其余部分的执行,这是您在绝大多数情况下想要的。如果您确实想要阻塞结构,请使用 查看此答案,但请注意,大多数浏览器不允许在浏览器的主线程上使用它。async
Atomics
.wait
两个新的JavaScript功能(截至2017年)帮助编写了这个“睡眠”函数:
async/await
async
/await
登陆 V8 并从 Chrome 55(2016 年 <> 月发布)开始默认启用
如果由于某种原因,您使用的是早于 7 的 Node(在 2017 年生命周期结束),或者针对旧浏览器,/ 仍然可以通过 Babel(一种将 JavaScript + 新功能转换为普通旧 JavaScript 的工具)使用插件。async
await
transform-async-to-generator
网友回答:
在 JavaScript 中,我重写了每个函数,以便它可以尽快结束。您希望浏览器重新控制,以便它可以更改您的 DOM。
每次我想在函数中间睡觉时,我都会重构以使用 .setTimeout()
臭名昭著的睡眠或延迟功能在任何语言中都备受争议。有些人会说应该总是有一个信号或回调来触发给定的功能,其他人会争辩说,有时任意的延迟时刻是有用的。我说每个人都有自己的规则,一个规则永远不能决定这个行业的任何事情。
编写睡眠函数很简单,并且使用 JavaScript Promise 变得更加可用:
// sleep time expects milliseconds
function sleep (time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
// Usage!
sleep(500).then(() => {
// Do something after the sleep!
});
模板简介:该模板名称为【有没有比下面的函数(从这里获取)更好的方法来设计JavaScript?sleep pausecomp】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。