ECMAScript 6 Promise对象学习之Promise兼容方案

 2015年07月29日    1331     声明


Promise规范在ECMAScript 6中被写入语言标准备中,ECMAScript 6发布2015年6月。在低版本浏览器和运行环境中,并不支持Promise对象,要在这些运行环境中使用Promise,就需要借助一些兼容Promise的类库。


  1. Promise类库的选择
  2. 一些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扩展类库

kriskowal/q

使用过Node.js的人可能会知道Q模块,Q实现了PromisesDeferreds等规范,在Node.js中环境或浏览器环境中使用。

then/promise

一个Promise/A+简单实现模块,除实现then方法外,还扩展一些标准外的方法,在Node.js中环境或浏览器环境中使用。

petkaantonov/bluebird

bluebird类库除了兼容Promise规范之外,还对Promise对象进行了一定的扩展,如:取消promise对象的运行等。另外,还在运行效率上进行了一定的优化。bluebird也是一个npm模块,可以在Node.js中环境或浏览器环境中使用。


2.2 Polyfill类库

yahoo/ypromise

ypromise是一个独立版本的 YUI的Promise Polyfill, 兼容ES6 Promises规范,可以在Node.js中环境或浏览器环境中使用。。

jakearchibald/es6-promise

es6-promise是一个兼容ES6 Promises规范的Polyfill类库,只实现了Promises规定的API, 是RSVP.js的一个子集,可以在Node.js中环境或浏览器环境中使用。