function myPromise(fun) {
if (!(this instanceof myPromise)) {
throw new TypeError('Function constructor A cannot be invoked without "new"')
}
/* 状态0表示初始 1 表示成功 -1表示失败 */
let myPromiseState = 0
let data = undefined
let resloveCallBack = undefined,rejectCallBack = undefined
this.then = function () {
if (myPromiseState==0) {
//成功回调保存
resloveCallBack=arguments[0]
//失败回调保存
rejectCallBack=arguments[1]
return this
}else if(myPromiseState=1/* 如果状态成功直接调用 */){
let result = arguments[0](data)
if (result instanceof myPromise) {
//返回 本来的promise对象
return result
}else{
//创建一个新的成功的promise对象
return myPromise.reslove(result)
}
}else if(myPromiseState=-1/* 如果状态失败也是直接调用 */){
let result = arguments[1](data)
if (result instanceof myPromise) {
//返回 本来的promise对象
return result
}else{
//创建一个新的成功的promise对象
return myPromise.reslove(result)
}
}
}
/* 成功 */
let reslove =p=>{
data = p
myPromiseState = 1
if (resloveCallBack!=undefined) {
resloveCallBack(p)
}
}
/* 失败 */
let reject =p=>{
data = p
myPromiseState = -1
if (rejectCallBack!=undefined) {
rejectCallBack(p)
}
}
/* 调用回调 */
fun(reslove, reject)
}
/* 成功调用 */
myPromise.reslove = function () {
let data = arguments[0]
return new myPromise(function () {
arguments[0](data)
})
}
/* 失败调用 */
myPromise.reject = function () {
let data = arguments[0]
return new myPromise(function () {
arguments[1](data)
})
}
myPromise.prototype.then = function () {/* 挂名 */ }
myPromise.prototype.catch = function () {/* 挂名 */ }
myPromise.prototype.finally = function () { /* 挂名 */}
手写Promise? 可能思路有点不一样
最新推荐文章于 2024-07-12 09:36:48 发布