1. resolve方法的实现
resolve方法为Promise函数对象上的方法,该方法能立即获得一个fulfilled
状态的Promise实例
根据传入的参数,分为以下几种情况
- 参数为非Promise对象,直接返回
fulfilled
状态的Promise实例,实例结果为传入的参数 - 参数为Promise对象,返回的Promise实例对象状态和结果取决于传入的Promise实例对象的状态和结果
例如:
-
参数为非Promise实例对象时
let p1 = Promise.resolve(1) let p2 = Promise.resolve('success') let p3 = Promise.resolve({name: '张三'}) console.log(p1) // [[PromiseState]]: "fulfilled" [[PromiseResult]]: 1 console.log(p2) // [[PromiseState]]: "fulfilled" [[PromiseResult]]: "success" console.log(p3) // [[PromiseState]]: "fulfilled" [[PromiseResult]]: Object
-
参数为Promise实例对象时
let p1 = Promise.resolve(new Promise((resolve, reject) => { resolve(1) })) let p2 = Promise.resolve(new Promise((resolve, reject) => { setTimeout(()=>{ resolve('success') },500) })) let p3 = Promise.resolve(new Promise((resolve, reject) => { reject('失败') })) console.log(p1) // [[PromiseState]]: "fulfilled" [[PromiseResult]]: 1 console.log(p2) // [[PromiseState]]: "fulfilled" [[PromiseResult]]: "success" console.log(p3) // [[PromiseState]]: "rejected" [[PromiseResult]]: "失败"
1.1 参数为非Promise实例对象实现
/*
返回一个指定了成功 value 的 promise 对象
*/
Promise.resolve = function (value) {
// 返回新的Promise实例
return new Promise((resolve, reject) => {
// 判断value是否为Promise实例
if(value instanceof Promise) {
} else {
// 直接调用resolve,将当前Promise实例状态改为fulfilled
resolve(value)
}
})
}
1.2 参数为Promise实例对象实现
参数为Promise实例对象时,则需要根据该Promise实例对象的状态去改变要返回的新的Primise状态,通过调用then方法可以实现
/*
返回一个指定了成功 value 的 promise 对象
*/
Promise.resolve = function (value) {
// 返回新的Promise实例
return new Promise((resolve, reject) => {
// 判断value是否为Promise实例
if(value instanceof Promise) {
value.then(resolve, reject)
} else {
// 直接调用resolve,将当前Promise实例状态改为fulfilled
resolve(value)
}
})
}
2.reject方法的实现
reject方法为Promise函数对象上的方法,该方法能立即获得一个rejected
状态的Promise实例
与resolve方法不同,无论传入的参数是否为Promise实例,reject方法都会返回
rejected
状态的Promise实例,且结果即为传入的参数
例如:
let p1 = Promise.reject('1')
let p2 = Promise.reject(new Promise((resolve, reject) => {
resolve(1)
}))
console.log(p1) // [[PromiseState]]: "rejected" [[PromiseResult]]: "1"
console.log(p2) // [[PromiseState]]: "rejected" [[PromiseResult]]: Promise
实现:
/*
返回一个指定了失败 reason 的 promise 对象
*/
Promise.reject = function (reason) {
// 返回新的Promise实例
return new Promise((resolve, reject) => {
// 直接调用reject,将当前Promise实例状态改为rejected
reject(reason)
})
}