作者:feix760
序言
不同项目下lib里的promise/deferred往往是差异化最多的,用起来和自己的习惯相比经常是缺胳膊少腿,因此聊聊标准的Promise的啥样的。
不同的 Promise 差异基本表现如下:
- 构造Promise对象
new Promise().resolve()
ornew Pomise(function(resolve, reject) {})
- 是否有
.done()
.fail()
.always()
等方法 - 是否有
Promise.all()
方法 - 是否有
isRejected()
isResolved()
.then()
return 结果链式的处理
有哪些标准
Promises/A+兼容扩展Promises/A而来,es6里的Promise准守Promises/A+规范,也是当今的标准规范。
标准的 Promise
构造 :
- new Promise(function(resolve, reject) {})
静态方法 :
- Promise.all(iterable)
- Promise.race(iterable)
- Promise.reject(reason)
- Promise.resolve(value)
对象方法:
- Promise.prototype.then(onFulfilled, onRejected)
- Promise.prototype.catch(onRejected)
then方法参数onFulfilled可以直接返回数据/Promise实现链式,onRejected可以返回Promise反转结果链式
不标准的使用
- 构造Promise对象:
new Promise().resolve()
( 请使用new Promise(function(resolve, reject) {})
) .done()
.fail()
.always()
方法的使用 ( 请使用.then()
.catch()
)isRejected()
isResolved()
方法的使用
第三方库的支持
- node 0.12+ 支持标准es6 promise规范
- npm promise 支持标准es6规范,增加了done()等方法
- npm node-promise 支持标准es6规范,增加了更多的工具方法,人气不如npm promise
- jquery promise Promises/A 都没完整准守,存在
.done()
.fail().always()
等各种方法,.then()
的链式处理弱爆了