Promise
对象用来表示异步操作的结果。
1.Thenable接口
方法 | 描述 |
then(onFulfilled, onRejected) | 接收两个函数作为参数:一个用于处理承诺(promise)兑现时(fulfilled),一个用于处理承诺(promise)拒绝时(rejected)。 |
2.Promise类
Promise
类实现了 Thenable
接口。
静态方法 | 描述 |
Promise.resolve(value) | 相当于 new Promise((resolveFunc) => resolveFunc(value)) 的简写。 |
Promise.reject(reason) | 相当于 new Promise((undefined, rejectFunc) => rejectFunc(reason)) 的简写。 |
Promise.all(iterable) | 将多个 Promise 对象组合成一个新的 Promise 对象。 |
Promise.any(iterable) | 将多个 Promise 对象组合成一个新的 Promise 对象。 |
Promise.allSettled(iterable) | 将多个 Promise 对象组合成一个新的 Promise 对象。 |
Promise.race(iterable) | 将多个 Promise 对象组合成一个新的 Promise 对象。 |
实例方法 | 描述 |
then(onFulfilled) | 用于给 Promise 对象添加处理程序。如果想只提供 onRejected 拒绝处理程序,则需要在 onFulfilled 参数的位置上传入 undefined 值。 |
catch(onRejected) | 用于给 Promise 对象添加 onRejected 拒绝处理程序,相当于 then(undefined, onRejected) 。 |
finally(onFinally) | 用于给 Promise 对象添加 onFinally 处理程序,这个处理程序无论 Promise 对象最终落定为兑付或拒绝状态时都会执行。 |
3.创建Promise对象
创建 Promise
对象时,Promise()
构造函数接受一个执行器(executor)函数作为参数。
const p = new Promise(executor);
执行器(executor)函数的签名如下:
//只有resolveFunc函数
(resolveFunc) => { }
//有resolveFunc函数和rejectFunc函数
(resolveFunc, rejectFunc) => { }
//只有rejectFunc函数
(undefined, rejectFunc) => { }
resolveFunc
与 rejectFunc
也是函数。
resolveFunc(value)
rejectFunc(reason)
4.Promise对象状态
待定(pending)是 Promise
对象的初始状态。在待定状态下,Promise
对象可以落定(settled)为代表成功的兑现(fulfilled)状态 或者 代表失败的拒绝(rejected)状态。
Promise
对象的状态不一定非要脱离待定状态从而落定为兑现或拒绝状态。Promise
对象的状态如果一旦落定为兑现或拒绝状态,Promise
对象的状态就不再改变,不可从兑现或拒绝状态逆转为待定状态。
状态 | 描述 |
pending(待定) | 表示尚未开始或正在执行中 |
fulfilled(兑现),又称为resolved(解决) | 表示已经成功完成 |
rejected(拒绝) | 表示没有成功完成 |
let p = new Promise(() => {});
setTimeout(console.log, 0, p);
//输出
Promise { <state>: "pending" }
let p = new Promise((resolveFunc) => resolveFunc(6));
setTimeout(console.log, 0, p);
//输出
Promise { <state>: "fulfilled", <value>: 6 }
let p = new Promise((undefined, rejectFunc) => rejectFunc(6));
setTimeout(console.log, 0, p);
//输出
Promise { <state>: "rejected", <reason>: 6 }
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/21652.html