手写promise原理系列六:封装Promise.resolve方法,Promise.resolve的用法

手写promise原理系列六:封装Promise.resolve方法,Promise.resolve的用法_第1张图片

在前面几篇文章中,我们封装了 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原理系列六:封装Promise.resolve方法,Promise.resolve的用法_第2张图片

Promise.resolve 方法功能分析

  1. 调用 Promise.resolve() 返回一个 promise 对象;
  2. 如果参数是 promise 对象,则 promise 对象返回的状态结果就是 Promise.resolve 返回的 promise 对象的状态结果,成功则成功,失败则失败;
  3. 如果参数是非 promise 对象,则 Promise.resolve 返回一个状态为成功的结果;
  4. 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 方法的使用以及封装。

你可能感兴趣的:(手写promise,promise原理,promise用法,promise面试题,resolve用法)