Promise.resolve()
Promise.resolve()方法会返回一个Promise对象。
返回的 Promise对象依赖于出传入的参数value,其大致有如下三种情况:
- 参数
value是Promise对象,则直接返回这个入参的Promise对象; - 参数
value是thenable(带有 then 方法的对象),则返回的Promise对象依赖于这个 then 方法的执行; - 参数
value是其他值,则直接以此值为结果返回fulfilled状态的Promise对象;
入参是Promise对象
我们先来看几个🌰:
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(p1);
p1 === p2; // true
p2; // Promise {<fulfilled>: 1}
const p1 = Promise.reject(1);
const p2 = Promise.resolve(p1);
p1 === p2; // true
p2; // Promise {<rejected>: 1}
无论入参的Promise对象是 fulfilled 状态 还是 rejected 状态,都不影响 当入参是一个Promise对象时,则直接返回这个Promise对象作为返回值
入参是 thenable
我们先来看几个🌰
const thenable = {
then: () => {
}
};
const p = Promise.resolve(thenable);
p; // Promise {<pending>}
const thenable = {
then: (resolve, reject) => {
resolve('fulfilled!');
}
};
const p = Promise.resolve(thenable);
p; // Promise {<fulfilled>: "fulfilled!"}
const thenable = {
then: (resolve, reject) => {
reject('rejected');
}
};
const p = Promise.resolve(thenable);
p; // Promise {<rejected>: "rejected"}
const thenable = {
then: (resolve, reject) => {
throw new Error('123')
}
};
const p = Promise.resolve(thenable);
p; // Promise {<rejected>: Error: 123}
其实,我们可以简单的理解为,当入参是 thenable 时,返回的 Promise对象,就是将 thenable对象中的then函数作为参数,传递给new Promise()实例化所得到的结果。
深入理解的话,上述表述就会显得不太严谨,有兴趣的同学推荐阅读:
Promise.reject()
比起 Promise.resolve,Promise.reject要简单一些,它返回的Promise对象的状态一定是 rejected 的,而结果值就是入参的值。
举几个🌰:
const p1 = Promise.resolve(1);
const p2 = Promise.reject(p1);
p1 === p2; // false
p2; // Promise {<rejected>: Promise}
const thenable = {
then: () => {}
};
const p = Promise.reject(thenable);
p; // Promise {<rejected>: {then: () => {}}}
const p = Promise.reject(1);
p; // Promise {<rejected>: 1}
结语
本期没有结语可说。