什么是Promises

176 阅读2分钟

**Promises在前端十分流行,它适合异步事件较多的编程开发。
**Promises其实只是一种编程模式,一种代码的组织管理方式。

Promises的三种状态

一个Promise在某时刻一定是处于这三种状态中的一种:pending, fulfilled, or rejected.

  • Pending是Promise的初始状态,
  • fulfilled表示成功操作的状态,
  • rejected表示失败操作的状态。

一旦promise对象状态从pending状态到达了fulfilled或rejected状态后,则promise状态就不能改变,这也就表示不可能从fulfilled -> rejected,不可能从rejected -> fulfilled,不可能fulfilled -> fulfilled。

为什么使用Promise

为什么使用promise,就是为了了解使用promise的好处是什么。

1. 流水线

因为promise把值和计算方式进行分离,通过对象对“未来的值”进行代理,那么在写代码的过程中,可以假设该值已经求得,这就类似同步得到该值的写法一样。

2. 声明式接口

区别于一些基础流程控制的关键字for, break, return, if等,声明式的接口已经在数组操作中得到很好的使用,比如map, filter, reduce等。Promise的接口是声明式的,比如then, catch, Promise.all和Promise.race。声明式的api减少代码的bugs以及使代码易于阅读维护。

3. 多个异步事件的执行控制

Promise对处理多个异步事件的问题上,可以说是浅尝辄止。promise提供了2个方法,all和race。

Promise有什么局限

Promise的局限在于只能fulfilled一个值。比如上一个例子的需求我更改下,之前需求也是需要的,但同时请求response的值也需要通知到外部,请求失败也需要通知到外部。

那么就相当于在同一个逻辑中至少得大于2个的回调,才能做到3个通知外部(callback)。但构造一个Promise对象只有2个callback,这就表明Promise对象只能代理2个值(value, reason)。

所以只能代理未来2个值的对象,all和race就足够组合绝大部分的Promise能够表达异步情况。

参考文献

zh.wikipedia.org/wiki/Future…