Promise基础(2)

226 阅读1分钟

Promise.resolve()

Promise.resolve()方法会返回一个Promise对象。 返回的 Promise对象依赖于出传入的参数value,其大致有如下三种情况:

  • 参数valuePromise对象,则直接返回这个入参的Promise对象
  • 参数valuethenable(带有 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.resolvePromise.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}

结语

本期没有结语可说。