首页 > JavaScript > JavaScript Promise迷你书 > 4.1、Promise的实现类库(Library)

Promise的实现类库(Library)

在本小节里,我们将不打算对浏览器实现的Promise进行说明,而是要介绍一些第三方实现的和Promise兼容的类库。

为什么需要这些类库?

为什么需要这些类库呢?我想有些读者不免会有此疑问。首先能想到的原因是有些运行环境并不支持 ES6 Promises 。

当我们在网上查找Promise的实现类库的时候,有一个因素是首先要考虑的,那就是是否具有 Promises/A+兼容性。

Promises/A+ 是 ES6 Promises 的前身,Promise的 then 也是来自于此的基于社区的规范。

如果说一个类库兼容 Promises/A+ 的话,那么就是说它除了具有标准的 then 方法之外,很多情况下也说明此类库还支持 Promise.allcatch 等功能。

但是 Promises/A+ 实际上只是定义了关于 Promise#then 的规范,所以有些类库可能实现了其它诸如 allcatch 等功能,但是可能名字却不一样。

如果我们说一个类库具有 then 兼容性的话,实际上指的是 Thenable,它通过使用 Promise.resolve 基于ES6 Promise的规定,进行promise对象的变换。

ES6 Promise 里关于promise对象的规定包括在使用 catch 方法,或使用 Promise.all 进行处理的时候不能出现错误。

Polyfill和扩展类库

在这些Promise的实现类库中,我们这里主要对两种类型的类库进行介绍。

一种是被称为 Polyfill (这是一款英国产品,就是装修刮墙用的腻子,其意义可想而知 – 译者注)的类库,另一种是即具有 Promises/A+兼容性 ,又增加了自己独特功能的类库。

Promise的实现类库数量非常之多,这里我们只是介绍了其中有限的几个。

Polyfill

只需要在浏览器中加载Polyfill类库,就能使用IE10等或者还没有提供对Promise支持的浏览器中使用Promise里规定的方法。

也就是说如果加载了Polyfill类库,就能在还不支持Promise的环境中,运行本文中的各种示例代码。

  • jakearchibald/es6-promise
    一个兼容 ES6 Promises 的Polyfill类库。它基于 RSVP.js 这个兼容 Promises/A+ 的类库,它只是 RSVP.js 的一个子集,只实现了Promises 规定的 API。
  • yahoo/ypromise
    这是一个独立版本的 YUI 的 Promise Polyfill,具有和 ES6 Promises 的兼容性。
    本书的示例代码也都是基于这个 ypromise 的 Polyfill 来在线运行的。
  • getify/native-promise-only
    以作为ES6 Promises的polyfill为目的的类库,它严格按照ES6 Promises的规范设计,没有添加在规范中没有定义的功能。如果运行环境有原生的Promise支持的话,则优先使用原生的Promise支持。

Promise扩展类库

Promise扩展类库除了实现了Promise中定义的规范之外,还增加了自己独自定义的功能。

Promise扩展类库数量非常的多,我们只介绍其中两个比较有名的类库。

  • kriskowal/q
    类库 Q 实现了 Promises 和 Deferreds 等规范。它自2009年开始开发,还提供了面向Node.js的文件IO API Q-IO 等,是一个在很多场景下都能用得到的类库。
  • petkaantonov/bluebird
    这个类库除了兼容 Promise 规范之外,还扩展了取消promise对象的运行,取得promise的运行进度,以及错误处理的扩展检测等非常丰富的功能,此外它在实现上还在性能问题下了很大的功夫。

Q 和 Bluebird 这两个类库除了都能在浏览器里运行之外,充实的API reference也是其特征。

这两个类库的文档写得都很友好,即使我们不使用这两个类库,阅读一下它们的文档也具有一定的参考价值。

总结

本小节介绍了Promise的实现类库中的 Polyfill 和扩展类库这两种。

Promise的实现类库种类繁多,到底选择哪个来使用完全看自己的喜好了。

但是由于这些类库实现的 Promise 同时具有 Promises/A+ 或 ES6 Promises 共通的接口,所以在使用某一类库的时候,有时候也可以参考一下其他类库的代码或者扩展功能。

熟练掌握Promise中的共通概念,进而能在实际中能对这些技术运用自如,这也是本书的写作目的之一。

本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈