19 | Promise:使用Promise,告别回调函数
该思维导图由 AI 生成,仅供参考
异步编程的问题:代码逻辑不连续
- 深入了解
- 翻译
- 解释
- 总结
Promise:解决异步编程问题的利器 JavaScript的异步编程模型给编码方式带来了影响,导致代码逻辑不连续和回调地狱等问题。本文介绍了Promise作为解决异步编程问题的方案,重点讨论了Promise如何消除嵌套调用和合并多个任务的错误处理。通过封装异步代码,Promise使得处理流程变得线性,提高了代码的可读性和可维护性。文章通过具体的代码示例和图示,生动地展示了Promise的应用场景和解决问题的方式。Promise通过回调函数延迟绑定、回调函数返回值穿透和错误“冒泡”技术解决了多层嵌套和频繁错误处理的问题。此外,文章还分析了Promise之所以要使用微任务是由Promise回调函数延迟绑定技术导致的。Promise的使用方式使得代码更加优雅,更加符合人的线性思维。通过本文的深入浅出的介绍,读者可以快速了解Promise的动机和解决的问题,为读者提供了对Promise的初步了解和认识。 总结:本文深入探讨了Promise作为解决JavaScript异步编程问题的利器。通过消除嵌套调用和合并多个任务的错误处理,Promise使得处理流程变得线性,提高了代码的可读性和可维护性。文章生动地展示了Promise的应用场景和解决问题的方式,包括回调函数延迟绑定、回调函数返回值穿透和错误“冒泡”技术。此外,文章还分析了Promise之所以要使用微任务的原因。通过本文的深入浅出的介绍,读者可以快速了解Promise的动机和解决的问题,为读者提供了对Promise的初步了解和认识。
《浏览器工作原理与实践》,新⼈⾸单¥59
全部留言(48)
- 最新
- 精选
- 空间异步AJAX请求是宏任务吧?Promise是微任务,那么用Promise进行的异步Ajax调用时宏任务还是微任务?
作者回复: ajax就是xmlhttprequest,必然是宏任务! 准确地说,Promise在执行resolve或者reject时,触发微任务,所以在Promise的executor函数中调用xmlhttprequest会触发宏任务。 如果xmlhttprequest请求成功了,通过resolve触发微任务 如果xmlhttprequest请求失败了,通过reject触发微任务
2019-09-18269 - 皮皮大神老师,我觉得这章没有前面的讲得透彻,手写的bromise非常不完整,希望老师答疑的时候可以带我们写一遍完整promise源码,三种状态的切换,还有.then为什么可以连续调用,内部如何解决多层异步嵌套,我觉得都很值得讲解,老师带我们飞。
作者回复: 这个加餐可以有! 这篇问题主要在宏观视角建立对Promise的认知。 关于手写 或者细节内容课程结束之后我们慢慢聊。 目前被编辑追稿子压力大,好多问题没及时回复还望理解哈。课程结束之后我会相信回复大家的问题的。
2019-09-181129 - 許敲敲面试手写promise也不怕了
作者回复: 手写我加餐来讲
2019-09-1794 - Chao老师 你有答疑环节吗
作者回复: 有,现在写稿子时间紧,等我主要稿件写完会抽出大把时间来专门解答问题。
2019-09-1723 - 任振鹏老师 渲染流水线 在 微任务 之前 还是 之后 执行啊?
作者回复: 微任务也可以不触发渲染操作,也可以出发渲染操作! 比如你也可以在微任务中通过js来修改dom,触发重绘,重排等动作! 你也可以在微任务中执行一些逻辑运算,这就和页面渲染没有关系了!
2019-12-071 - Geek_6b0898想问下老师什么时候给加餐课?支持老师尽快出啊
作者回复: 快了,快了,最近家里小孩生病住院,折腾了好久,刚出院!
2019-11-121 - 袋袋老师,最后说定时器的效率不高,promise又把定时器改造成了微任务,可以说下具体是怎么改造的吗
作者回复: 微任务是v8来实现的,具体实现方式等我课程录完来手写一个Promise。
2019-09-181 - 蓝配鸡请问老师你用的什么工具画图?
作者回复: mac下的keynote
2019-11-01 - 花儿与少年老师会在加班课里给大家讲解典型课后思考题吗
作者回复: 会的,可以把你的问题列出来,我答疑时会有针对性
2019-09-19 - Geek_Jamorx这三个题目非常重要,就跟做笔记一样回答了 1、Promise 中为什么要引入微任务? 由于promise采用.then延时绑定回调机制,而new Promise时又需要直接执行promise中的方法,即发生了先执行方法后添加回调的过程,此时需等待then方法绑定两个回调后才能继续执行方法回调,便可将回调添加到当前js调用栈中执行结束后的任务队列中,由于宏任务较多容易堵塞,则采用了微任务 2、Promise 中是如何实现回调函数返回值穿透的? 首先Promise的执行结果保存在promise的data变量中,然后是.then方法返回值为使用resolved或rejected回调方法新建的一个promise对象,即例如成功则返回new Promise(resolved),将前一个promise的data值赋给新建的promise 3、Promise 出错后,是怎么通过“冒泡”传递给最后那个捕获 promise内部有resolved_和rejected_变量保存成功和失败的回调,进入.then(resolved,rejected)时会判断rejected参数是否为函数,若是函数,错误时使用rejected处理错误;若不是,则错误时直接throw错误,一直传递到最后的捕获,若最后没有被捕获,则会报错。可通过监听unhandledrejection事件捕获未处理的promise错误2019-09-17888