惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Vercel News
Vercel News
Martin Fowler
Martin Fowler
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LangChain Blog
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs

JavaScript

发现国内很多文章对宏任务和微任务的解释都是有问题的 智能香氛机小程序外包合作招募 分享一道 Node.js 的面试题,考察 JS 相关的最基本的掌握程度,代码完全来自官方文档 你们 js 用过双等号吗 有人大量建立技术文档的.cn 中文站点,并将站内 js 链接指向 cdn.jsdelivr.net.cn 发现了两个关于 JavaScript 语言好玩的网站,让人血压升高 js 判空值 最佳实践 简单的图像算法为什么 AI 搞不定呢 Capacitor.JS 如何自动化最后一步流程 JSON.parse 转数字精度丢失问题 有没有前端大佬,帮我看一下这个网站底部的粒子动画怎么做的。 这段前端代码存在并发读取竞态的问题吗? nstr - number → string, but looks good 前端 js 播放 base64 编码的 mp3,放出来杂音很大,请教是哪里出错了? 熟悉工业计算的来,是阀门相关的企业 小米手机澎湃系统 AutoJS 的悬浮窗在证券软件打开时就消失 关于 js 复制粘贴问题 求助,无法在 wixsite.com 上使用 document.write threejs 官方文档看着好难受。 有没有 AI 能一步一步教会伸手党如何使用业务系统? 也聊下自己最近用 copilot 写程序的心得,还要讨教下方案 javascript 继续 套壳 AI 应用类 manus 如何在移动端 h5 页面实现<Select/>搜索下拉选择框! 求前端高频数据绘图库 吐槽一下 Trae 记忆中好像在论坛看到有款专门在 iframe 中做前端的 js 库/框架? JavaScript 中的 Promise 跟异步有关系吗?还是我的理解有问题?谁能把 Promise 解释清楚? Promise 的正确用法应该是什么样的? 求问,小程序的菜单栏怎么和右边的功能键垂直居中? 自习室小程序的座位图是如何实现的(前端) 谷歌浏览器的 bug
js 不使用 promise 完成一个 sleep 函数,必须支持 await 调用
wefgonujnopu · 2025-06-23 · via JavaScript

很多人说这个没用,还嘲讽深入理解,没有解决麻烦和任何问题
我举个最简单的例子,python协程的async await,代码如下:

import asyncio


async def sleep(seconds):
    await asyncio.sleep(seconds)


async def main(num=0):
    # 并发执行多个异步任务
    print(num)
    await sleep(0.0001)
    await main(num + 1)


asyncio.run(main())

输出到1000就会堆栈溢出,而用js的promise实现一样的函数,却不会
然而一旦把sleep去掉,就会立马堆栈溢出

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


async function main(num=0){
    console.log(num)
    //去掉sleep会堆栈溢出
    await sleep(1);
    await main(num+1)
}

main()

因为js中的await实际上等效于then,也就是下面的代码,每次循环都是新的任务提交到事件循环队列,所以不会堆栈累加:

async function main(num=0){
    console.log(num)
 
    sleep(1).then(()=>{
        main(num+1)  
    })
}

导致函数堆栈溢出的因素都可以说成不重要。没有任何意义,到底是自己没有认真学,还是真的不重要,各位自行判断吧