gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:30:07 24 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/58249683/

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