什么是Promise?
Promise就是一个对象,用来传递异步操作的消息,它代表了某个未来才会知道结果的事件(通常是异步操作),并且这个事件提供统一的API,可供进一步处理。
Promise对象的两个对象
对象的状态不收外界影响,Promise对象代表了一个异步操作。有三种状态Pending(进行中)、Resolve(已完成,又称Fulfilled)和Rejected(已失败)。只有异步的操作结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
一旦状态改变就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变只有两种可能 :
- 从Rending变为Resolved和从Pending变为Rrojected。只要其中之一发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生,你在对Promise对象添加回调函数,也会立即得到这个结果。
- 这个和事件完全不同,事件的特点是,如果你错过了它,你在监听是得不到结果的。
Promise的不足之处
- 无法取消Promise,一旦新建他就会立即执行,无法从中途取消。
- 不过不设置回调函数,Promise内部抛出的错误不会立即反映到外部。
- 当处于Pending状态时,无法得知目前进展到哪一个阶段。
- 如果某些事情不断的重复发生,一般来说,使用stream模式还是部署Promise更好一点。
Promise的基本用法
创建一个Promise 的实例
|
|
Promise函数接受一个函数作为参数,该函数的两个参数分别是 resolve 和 reject。
resolve和reject 函数的作用
- resolve是将Promise对象的状态从’未完成‘变为‘成功’。在异步操作成功调用后,会将异步操作的结果作为参数传递出去
- reject 函数在一步操作失败时调用,并将异步操作报出的错误作为参数传递出去
Promise生成后的操作
Promise实例生成后,可以用then方法分别指定Resolved传递和Rejected状态的回调函数。12345Promise.then(function(value){ //success},functiom(value){ //false})
then方法可以接受两个回调函数作为的参数,第一个回调函数是Promise对象的状态变为Resolved是调用,第二个回调函数是Promise对象的状态变为Rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数