Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值。
Promise对象的几种状态:
- 待定(pending):初始状态,即没有被兑现,也没有被拒绝。
- 已兑现(fulfilled):表示操作成功、完成。
- 已拒绝(rejected):表示操作失败。
- 已敲定(settled):如果一个 promise 已经被兑现(fulfilled)或被拒绝(rejected),那么也可以说它处于已敲定(settled)状态。
链式调用
promise可以使用promise.then((onFulfilled, onRejected)、promise.catch(onRejected)和 promise.finally(onFinally)进行链式调用,这些实例方法都会返回一个新的promise对象。这个promise对象的状态,由这些实例方法的参数(onFulfilled\onRejected\onFinally)的返回值决定:
两种情况返回的promise对象状态为已拒绝。第一种情况在函数中抛出异常;第二种情况是返回一个已拒绝的promise对象,此时返回的promise对象替换这些实例方法返回的对象。除了这两种情况,这些实例方法返回的promise对象都为已兑现状态。
所有promise都是异步的
处于已敲定状态的promise对象也可以接收操作,因此在完成异步操作和绑定处理方法之间不会存在竞争状态。需要注意的是所有的 promise 都一定是异步的。因此,一个已经处于"已敲定"("settled")状态的 promise 中的操作只有 promise 链式调用的栈被清空了和一个事件循环过去了之后才会被执行。
const promiseA = new Promise( (resolutionFunc,rejectionFunc) => {
resolutionFunc(777);
});
// 这时,"promiseA" 已经被敲定了。
promiseA.then( (val) => console.log("asynchronous logging has val:",val) );
console.log("immediate logging");
// produces output in this order:
// immediate logging
// asynchronous logging has val: 777
网友评论