JavaScript 中实现 sleep
栏目: JavaScript · 发布时间: 6年前
内容简介:来自推特上 Windows 故障分析的笑话 图片来源:推上看到的笑话,Windows 故障分析的实现。
来自推特上 Windows 故障分析的笑话 图片来源: me.me
推上看到的笑话,Windows 故障分析的实现。
然后想起来 JavaScript 中如何实现这个 sleep() 函数让代码暂停指定时间。
异步版本
借助 Promise 这事很好实现。
function sleep(time) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, time);
});
}
创建一个 Promise ,等待指定时间后 resolve 掉即可。
但, Promise 是异步的,它要求后续代码要么包含在 then 里面,要么通过 async/await 来调用。
所以使用起来应该像这样子,
function testSleep() {
console.log("will sleep for 1s");
sleep(1000).then(() => {
console.log("will sleep for another 5s");
sleep(5000).then(() => {
console.log("waked up");
});
});
}
testSleep();
或者这样子:
async function testSleep() {
console.log("will sleep for 1s");
await sleep(1000);
console.log("will sleep for another 5s");
await sleep(5000);
console.log("waked up");
}
testSleep();
测试 sleep
当然后者会更加优雅些,但本质上都是需要保证后续代码在 Promise 回调中执行。如何有回调之外的代码,则不会被阻断,这便是其缺点。
async function testSleep() {
console.log("will sleep for 1s");
await sleep(1000);
console.log("will sleep for another 5s");
await sleep(5000);
console.log("waked up");
}
testSleep();
// :rotating_light:不会按预期那样最后执行,而是立即被执行
console.log("我在等上面的代码执行完...");
代码未阻断的情况
同步版本
不借助异步异步代码想阻断代码执行,那其实可以让代码原地跑,通过 while 。
function syncSleep(time) {
const start = new Date().getTime();
while (new Date().getTime() - start < time) {}
}
使用起来就和正常函数没区别了,对周围代码也没有要求必需得在回调什么的:
console.log("start test sync sleep...");
syncSleep(3000);
console.log("sync sleep after 3s");
测试同步版本的 sleep
方便是方便,但不建议使用这种方式,毕竟代码在空跑。如果需要这样的场景,你需要考虑是否可以修改下代码或换个设计,异步能满足大部分需求。
以上所述就是小编给大家介绍的《JavaScript 中实现 sleep》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
禅与摩托车维修艺术
(美)罗伯特·M.波西格 / 张国辰 / 重庆出版社 / 2011-9 / 36.00元
在一个炎热的夏天,父子两人和约翰夫妇骑摩托车从明尼苏达到加州,跨越美国大陆,旅行的过程与一个青年斐德洛研修科学技术与西方经典,寻求自我的解脱,以及探寻生命的意义的过程相互穿插。一路上父亲以一场哲学肖陶扩的形式,将见到的自然景色,野外露营的经历,夜晚旅店的谈话,机车修护技术等等日常生活与西方从苏格拉底以来的理性哲学的深入浅出的阐述与评论相结合,进行了对形而上学传统的主客体二元论的反思,以及对科学与艺......一起来看看 《禅与摩托车维修艺术》 这本书的介绍吧!