在前面几篇文章中,我们封装了 Promise 构造函数、原型对象方法 then 以及 catch ,相信大家是有所收获的,接下来的篇章我们去探寻一下 Promise 构造函数的静态方法:resolve、reject、all以及race方法。
让我们先从 Promise.resolve方法 开始,Let’s go。
Promise.resolve 方法接受一个参数,可以是 promise 对象,也可以是非 promise 对象的任意值。用法如下:
let p1 = Promise.resolve();
let p2 = Promise.resolve("111");
let p3 = Promise.resolve(new Promise((resolve, reject) => {
resolve("OK");
}))
let p4 = Promise.resolve(new Promise((resolve, reject) => {
reject("NO");
}))
console.log(p1);
console.log(p2);
console.log(p3);
console.log(p4);
Promise.resolve 方法功能分析:
- 调用
Promise.resolve()
返回一个 promise 对象; - 如果参数是 promise 对象,则 promise 对象返回的状态结果就是 Promise.resolve 返回的 promise 对象的状态结果,成功则成功,失败则失败;
- 如果参数是非 promise 对象,则 Promise.resolve 返回一个状态为成功的结果;
Promise.resolve()
中无参数时,返回一个状态为成功[[PromiseState]]: fulfilled
,结果为[[PromiseResult]]: undefined
的 promise 对象。
Promise.resolve 代码封装的实现:
Promise.resolve = function (data) {
// 返回一个 promise 对象
return new Promise((resolve, reject) => {
// 判断参数是否是一个 promise 对象
if (data instanceof Promise) {
// 参数为 promise对象,则调用 then 方法
data.then(value => {
resolve(value);
}, reason => {
reject(reason)
})
} else {
// 非 promise 对象的任意值,则直接返回成功的状态以及结果
resolve(data);
}
})
}
下一章节探讨一下和 Promise.resolve 相对应的 api:Promise.reject 方法的使用以及封装。