js 不使用 promise 完成一个 sleep 函数,必须支持 await 调用

22 天前
 wefgonujnopu
有没有人会写的,看看 v 站有多少大神
要求:
await sleep(毫秒),让当前 async 函数进入等待,不能阻塞线程

提示: 实现起来非常简单,只要几行,不能使用任何库,要兼容浏览器环境
8747 次点击
所在节点    JavaScript
148 条回复
Zhuzhuchenyan
22 天前
await 的 operand 只需要是一个 Thenable 就可以了
wefgonujnopu
22 天前
@Zhuzhuchenyan nb ,这么快就有人答出来了
wefgonujnopu
22 天前
对 promise 和 await 理解深入才能答出来。这个感觉可以当面试题,问 ai ai 都说做不到,还得提示下才回复正确答案
yimity
22 天前
yield 也应该可以实现。
lscho
22 天前
感觉 op 刚学 js 。。。。

之前 es6 提案通过,但是未正式实现的时候,都是这样实现的
Plumbiu
22 天前
@lscho es6 哪来的 async 和 await
taotaodaddy
21 天前
AI 没问题的,gemini 2.5 pro 明确回答 await 关键字实际上等待的并不仅仅是 Promise 对象,而是任何符合 "Thenable" 规范的对象

它也完美得给出了与 1 楼基本相同的代码
muzig
21 天前
当面试回答的意义就是“深入理解”?🤔
humbass
21 天前
试了下用以下关键字问 AI (我手机上装了 7 种),只有 gemini, deepseek 回答正确。(ー_ー)!!

``` promp
js 不使用 promise ,写一个支持 await 调用的 sleep 函数
dcsuibian
21 天前
感觉你不适合当面试官。
这个问题没有解决任何问题,徒增麻烦。
lscho
21 天前
@Plumbiu 有没有可能我说的是 Promise 对象。。。。op 的问题本质就是 Promise ,并不是 async 和 await 。async 和 await 只是一个语法糖而已。
foolishcrab
21 天前
拿这个面试还不如直接问对方你们公司厕所纸用的什么品牌,这必须对你们公司有强烈意向以及惊人的观察力才能回答出来。对吧?
fgwmlhdkkkw
21 天前
茴有几种写法?
fpk5
21 天前
中文提问 claude opus 4 回答不行,英文提问妙答正确答案。看来中文的训练语料库差距有点大,语言在 AI 时代仍然是个隔阂。
wefgonujnopu
21 天前
@dcsuibian 面试题不就是徒增麻烦的,手写 promise 没见过吗,有什么用,async await 本质上是语法糖,await xxx 实际上执行的就是 xxx.then(()=>{}),理解这个就能写出来,某些人学 promise 可能以为是线程,在阻塞的方法前面加 await 以为能异步的人也不少
wefgonujnopu
21 天前
@foolishcrab 对的,你们公司要招聘厕纸人才的话确实可以这样问
wefgonujnopu
21 天前
@lscho 确实是这样实现的,不过没有 await,用起来是回调地狱,这个考验你对 await 的理解而已,不是关键词,而是语法糖
Sunzehui
21 天前
什么叫“让当前 async 函数进入等待,不能阻塞线程”?你听听说的是人话吗,真不怨 AI 答不出来,难道 JavaScript 是多线程语言?
wefgonujnopu
21 天前
@Sunzehui 懂了,js 没有线程,什么函数都不会阻塞线程,单线程语言没有线程的概念,怎么写都不会卡死,即使是 while 死循环
windliang
21 天前
@wefgonujnopu #3 ChatGpt 4o 答案直接出来了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1140531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX