promise对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的API。

promise对象有两个特点:

1.对象的状态不受外界影响。promise对象代表一个异步操作,有3种状态:pending(进行种),resolved(已完成,又称fulfilled),rejected(已失败)。只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是"promise"这个名字的由来,它在英语中的意思为"承诺",表示其他手段无法改变。

2.一旦状态改变就不会再变,任何时候都可以得到这个结果。promise对象的状态改变只有两种可能:从pending到resolves和pending到rejected。只要其中之一发生,状态就凝固了,不会再变,会一直保持这个结果。就算改变已经发生,你再对promise对象添加回调函数,也会立即得到这个结果。这与事件(event)完全不同。事件的特点是,如果你错过了它,再去监听是得不到结果的。

有了promise对象,就可以将异步操作以同步操作的流程表达出了,避免了层层嵌套的回调函数。此外,promise对象提供统一的接口,使得控制异步操作更加容易。

promise也有一些缺点。其中,无法取消promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,promise内部抛出的错误不会反应到外部。再者,处于pending状态时,无法得知目前发展到哪一阶段(刚刚开始还是即将完成)。

如果某些事件不断地反复发生,一般来说,使用stream模式是比部署promise更好的选择。

posted on 2017-09-20 21:03  晴天牧牧  阅读(382)  评论(0编辑  收藏  举报