标签:resolve undefined 简单 reject next Promise arg fail 手写
1.Promise有三个状态 pending待决议 fulfilled成功 rejected失败,一旦改变不能再修改
2.Promise构造函数接受一个函数,参数分别未resolve、reject两个函数,用
于修改状态
3.有一个then方法,接受两个回调,状态变化时调用相应的函数,并返回新的
promise对象
4.有一个catch方法,接收一个失败回调
const PENDING="pending"
const FULFILLED="fulfilled"
const REJECTED="rejected"
function _isFunction(fn){
return typeof fn ==='function'
}
class Promise{
constructor(fn) {
this.state=PENDING
this.success=undefined
this.fail=undefined
this.resolve_arg=undefined
this.reject_arg=undefined
this.nextState=PENDING
this.next_resolve_arg=undefined
this.next_reject_arg=undefined
this.nextResolve=undefined
this.nextReject=undefined
fn(this.resolve.bind(this),this.reject.bind(this))
}
resolve(arg){
this.resolve_arg=arg
this.state=FULFILLED
if (this.success){
this.next_resolve_arg=this.success(arg)
if (this.nextResolve){
this.nextResolve()
}
}
}
reject(arg){
this.reject_arg=arg
this.state=REJECTED
if (this.fail){
this.next_reject_arg=this.fail(arg)
}else {
if (this.nextReject){
this.nextReject(this.next_reject_arg)
}
}
}
then(success,fail){
if (this.state===FULFILLED){
this.next_resolve_arg=success(this.resolve_arg)
this.nextState=FULFILLED
}else if (this.state===REJECTED){
this.next_reject_arg=fail(this.reject_arg)
this.nextState=REJECTED
}else {
this.success=success
this.fail=fail
}
let $this=this
return new Promise(function (n_resolve,n_reject){
if ($this.nextState===FULFILLED){
n_resolve($this.next_resolve_arg)
}else if ($this.nextState===REJECTED){
n_reject($this.next_reject_arg)
}else {
$this.nextResolve=n_resolve
$this.nextReject=n_reject
}
})
}
catch(fail){
if (this.state===REJECTED){
fail(this.reject_arg)
}else {
this.fail=fail
}
}
}
module.exports=Promise
标签:resolve,undefined,简单,reject,next,Promise,arg,fail,手写 来源: https://blog.csdn.net/m0_46439976/article/details/120238707
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。