前言
为解决异步函数的回调陷阱,开发社区不断摸索,终于折腾出 Promise/A+。它的优势非常显著:
- 不增加新的语法,可以立刻适配几乎所有浏览器
- 以队列的形式组织代码,易读好改
- 捕获异常方案也基本可用
这套方案在迭代中逐步完善,最终被吸收进 ES2015。不仅如此,ES2017 中还增加了 Await/Async,可以用顺序的方式书写异步代码,甚至可以正常抛出捕获错误,维护同一个栈。可以说彻底解决了异步回调的问题。
现在大部分浏览器和 Node.js 都已原生支持 Promise,很多类库也开始返回 Promise 对象,更有各种降级适配策略。Node.js 7+ 则实装了 Await/Async。如果您现在还不会使用,那么我建议您尽快学习一下。本文我准备结合近期的开发经验,全面介绍现代化的 JavaScript 异步开发。
关于这本书
这本书最开始的内容源于我在 SegmentFault 做的一场分享: Promise 的 N 种用法。
后来去 GitChat 分享时,选题比较犯难,就跟运营妹子商量要不再做一次同样题目,这样我也省事儿。结果挂出来后乏人问津,只好再跟运营开会讨论,然后决定更名为《JavaScript 异步开发攻略》,并且增加非 Promise 的内容。改名后终于过了下限,然后我就动手写,于是便有了这本小书。
我写这本书时就打算根据环境发展随时更新内容,没想到 GitChat 设计成后期不允许修改文章,要改只能把内容发给运营人工修改。因为我写的时候为了分章节好维护好管理,用的是 Git + Gitbook,索性脆放到 Gitbook 上好了。名字也改成现在这个样子,增加一个“全”字。
目标读者要求
- 前端水平:初级、中级
- 了解 JavaScript
- 最好有异步开发经历,希望写出更好的代码
名词及约定
- ES6 = ES2015
- ES7 = ES2016 + ES2017
- 异步函数 = Async Functions = Await/Async
范例代码会使用 ES6 的语法,也会混用 ES6 Module 和 CommonJS,请大家不要见怪。我会在代码当中加注释,其中会有一些关键内容,请大家不要忽略。
本文中所有代码均以 Node.js 7.0 为基础。
作者介绍
大家好,我叫翟路佳,花名“肉山”,这个名字跟 Dota 没关系,从高中起伴随我到现在。
我热爱编程,喜欢学习,喜欢分享,从业十余年,投入的比较多,学习积累到的也比较多,对前端方方面面都有所了解,希望能与大家分享。
我兴趣爱好比较广泛,尤其喜欢旅游,欢迎大家相互交流。
你可以在这里找到我:
版权许可
本书采用“保持署名—非商用”创意共享4.0许可证。
只要保持原作者署名和非商用,您可以自由地阅读、分享、修改本书。
反馈
如果您对于文中的内容有任何疑问,请在评论或 Issue 中告诉我。亦可发邮件给我:meathill[at]gmail.com。谢谢。