【JS泡面文】如何实现一个sleep函数?

本文介绍了如何在JavaScript中实现一个模拟sleep效果的函数,避免回调地狱,并展示了如何利用该函数进行异步的循环打印。通过结合Promise和async/await,实现了等待一定时间后再执行后续代码的功能。

如何实现一个sleep函数?

调味料包

我们需要备齐以下👇料包

  • 实现一个sleep函数

泡面时间

但是由于JS单线程的特性,实际上并不能做到真正的sleep(不然挂起了之后,别的代码咋办┓( ´∀` )┏)。

我们所说的sleep多数指的都是在等待一定的毫秒数后执行某个代码。

假如使用setTimeout来做肯定可以,但是假如嵌套了多层,那岂不是就又陷入了回调了么 ̄へ ̄

一想到回调地域

诶💡

那我们是不是可以往promiseasync await上面靠一靠。。。结合setTimeout一定能搞大事情

用上面的思路来尝试着写一个sleep函数:

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

console.log('你好,半秒后我会回来');
await sleep(500);
console.log('你好,我回来了,再等我半秒');
await sleep(500);
console.log('我准备好了,咱们继续说sleep函数把');

下面我们在控制台测试一下上面的代码

控制台输出

此时我们发现,每一段代码都间隔了500ms才输出,此时我们已经达成了我们的目标!

将下面👇的调料包放入泡面

  • 完成了一个sleep函数。

加餐时间

sleep函数还有什么其它作用呢?

实现异步的循环打印

假如希望每隔1s,按照从0到5的顺序,输出一个数字,此时应该怎么做?

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function count() {
    for (let i = 0; i < 6; i++) {
        await sleep(1000);
        console.log(i)
    }
}

count();

揭开泡面盖

sleep函数的实现为

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

参考资料(扩展阅读)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值