请你实现一个JavaScript休眠等待的代码程序

问题:请你实现一个等待函数,例如先打印“吃早饭”,休眠2秒钟,再打印“吃午饭”,再休眠2秒钟,打印“吃晚饭”的代码。

目录

1 通过这道题可以想到哪些场景?

2 简单实现一下

3 改进一下

4 其他场景


1 通过这道题可以想到哪些场景?

这道题虽然是说固定的休息2秒钟,再做一件事情,但其实可以想到一些场景。而且面试中,题目也不会一沉不变的,面试官一定会把题目扭转来去,各种各样。

休眠2秒钟,但如果是3秒呢,或者不确定多少秒呢,是不是很像我们说的异步请求。比如先打印了“吃早饭”,然后发送一个异步请求,当请求成功了才能继续吃午饭,而没有请求成功延迟了,是不是吃午饭的时间就得靠后一些呢?

再比如,这个休眠时间不是固定的2秒钟呢,需求规定,第一次休眠2秒可以吃午饭,吃完了午饭,要休眠5秒才能吃晚饭呢?

2 简单实现一下

如果不加异步请求,我们首先可以想到利用setTimeout来实现,多久后执行一次,正适合模拟这个场景。

<script>
            console.log('吃早饭');
            setTimeout(() => {
                console.log('吃午饭');
                setTimeout(() => {
                    console.log('吃晚饭');
                }, 5000)
            }, 2000)
</script>

其实这样写,最灵活,你想怎么给我出题我都可以搞定,不就是弄出了个回调地狱嘛,但很明显,回调地狱是大家在开发中,越来越规避的问题。

而且就算开发需求中,没人管你,你自己开发,想怎么回调怎么回调,但面试中,自己一定是优秀的,自己日常不注意的东西没人管,但面试中一定调整好自己,哪怕面试完了自己再自由飞翔敲代码呢。

3 改进一下

<script>
            const sleep = (time) => {
                return new Promise((resolve, rejuect) => {
                    setTimeout(() => {
                        resolve('You can eat!');
                    }, time)
                })
            }
            const wantEat = async () => {
                console.time();
                console.log('吃早饭');
                await sleep(2000);
                console.log('吃午饭');
                await sleep(5000);
                console.log('吃晚饭');
                console.timeEnd()
            }
            wantEat();
</script>

这里使用了 async/await + promise的配合,通过await使程序顺序执行 ,当promise正常返回后才开始继续向下执行。

4 其他场景

这道题不光考怎么样可以顺序执行一些代码,sleep不就是希望程序可以等待后,再继续执行嘛。比如我们在做后端开发的时候,当你从数据库的一张表里查到id,下面拿着id继续去别的表里查数据,这个时候await就特别有用处。

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经海路大白狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值