从Promise的Then说起
这篇讲的是从Promise的`.then`方法切入,探讨如何让异步代码变得像同步一样线性可读。作者指出,传统的回调写法迫使开发者跳着读代码,破坏了从上到下的自然阅读流,而Promise正是为了解决这一痛点而生。 文章通过对比callback和Promise的代码示例,直观展示了Promise如何将嵌套逻辑“拉平”成清晰的链式调用。随后,内容深入到一个具体的技术疑点:当手动给`Array.prototype`添加`then`方法后,`Promise.all`的执行会“卡住”。通过查阅资料和剖析源码,作者引导读者理解Promise A+规范中的一个关键细节——如果`.then()`回调返回的对象具有`then`方法,它将被视为一个“thenable”对象并被尝试解包,这正是数组原型污染影响`Promise.all`行为的根源。 最后,文章以BlueBird库的实现为例,揭示了其内部如何通过`PromiseArray`来可靠地处理传入的可迭代对象。整篇文章从一个高频痛点出发,层层递进,最终落脚于规范与具体实现,巧妙地将一个看似奇怪的Bug与底层原理连接了起来。