gpt4 book ai didi

javascript - sleep() 的 JavaScript 版本是什么?

转载 作者:行者123 更新时间:2023-11-30 06:19:36 25 4
gpt4 key购买 nike

有没有比以下 pausecomp 函数 ( taken from here ) 更好的方法来在 JavaScript 中设计 sleep

function pausecomp(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}

这不是 Sleep in JavaScript - delay between actions 的副本;我希望在函数中间有一个真正的 sleep ,而不是一段代码执行之前的延迟。

最佳答案

2017 年 — 2021 年更新

自 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));

或在 typescript 中:

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();

请注意,

  1. await 只能在以 async 关键字为前缀的函数中执行,或者在 an increasing number of environments 中脚本的顶层执行.
  2. await 只暂停当前的 async 函数。这意味着它不会阻止脚本其余部分的执行,这在绝大多数情况下都是您想要的。如果您确实需要阻塞结构,请参阅 this answer使用 Atomics .wait,但请注意,大多数浏览器不允许在浏览器的主线程上使用它。

两个新的 JavaScript 特性(截至 2017 年)帮助编写了这个“ sleep ”函数:

兼容性

如果出于某种原因您使用的 Node 早于 7(已达到 end of life in 2017 ),或者针对旧浏览器,async/await 仍然可以使用通过Babel (一种将 transpile JavaScript + 新功能转换为普通旧 JavaScript 的工具),使用 transform-async-to-generator插件。

关于javascript - sleep() 的 JavaScript 版本是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com