Promise
规范在ECMAScript 6中被写入语言标准备中,ECMAScript 6发布2015年6月。在低版本浏览器和运行环境中,并不支持Promise
对象,要在这些运行环境中使用Promise
,就需要借助一些兼容Promise
的类库。
1. Promise
类库的选择
ECMAScript 6中的Promise
规范来源于Promises/A+社区,因此,在先类库时应该考虑对Promise/A+
兼容性。在Promise/A+
规范中,主要定义了对then
方法的实现,具有对then
方法的兼容,可以认为对象是Thenable
的,也就可以通过ECMAScript 6中Promise.resolve
将其转换为Promise
对象。
除选择Promise/A+
兼容性类库以外,还可以选择Polyfill类库。Polyfill
是兼容浏览器API的shim,浏览器中加载相关Polyfill
类库后,便可使用浏览器中原本没有的对象,如:Promise
。
2. 一些Promise
类库
2.1 Promise
扩展类库
使用过Node.js的人可能会知道Q
模块,Q
实现了Promises
和 Deferreds
等规范,在Node.js中环境或浏览器环境中使用。
一个Promise/A+
简单实现模块,除实现then
方法外,还扩展一些标准外的方法,在Node.js中环境或浏览器环境中使用。
bluebird
类库除了兼容Promise
规范之外,还对Promise
对象进行了一定的扩展,如:取消promise对象的运行等。另外,还在运行效率上进行了一定的优化。bluebird
也是一个npm
模块,可以在Node.js中环境或浏览器环境中使用。
2.2 Polyfill
类库
ypromise
是一个独立版本的 YUI的Promise Polyfill, 兼容ES6 Promises规范,可以在Node.js中环境或浏览器环境中使用。。
es6-promise
是一个兼容ES6 Promises规范的Polyfill类库,只实现了Promises规定的API,
是RSVP.js的一个子集,可以在Node.js中环境或浏览器环境中使用。