Promise是什么
promise是一个对象,表示一个异步操作的整体完成和返回的值
//怎么实现
promise 接受回调,并且调用,自身带有三种状态,pendding, onFulfilled, onRejected,并且 resolve 这个函数可以让 pendding 状态变成 onFulfilled 状态,同理 reject 函数可以让 pendding 状态变成 onRejected 状态
const PENDING = pending
const RESOLVE = resolve
const REJECT = reject
//定义promise类
class Promise{
//接受new Promise时 立即调用构造函数 接受用户插入的executor(resolve reject)
construtor(executor){
//默认状态
this.status=PENDING;
//成功时数据存储 可能是js值 underfied promise三者之一
this.value=undefied;
//失败原因
this.reason = underfied;
//成功的实例 由用户传入
let resolve = (value)=>{
if(this.status === PENDING){
this.status=RESOLVE;
this.value=value;
}
}
let reject = (reason)=>{
if(this.status === PENDING){
this.status=REJECT;
this.reason=reason;
}
}
//再executor外包裹try catch是为了捕获运行时的错误 以及throw new error()这种非用户主动调用reject时的情况
try{
//立即执行函数 执行器就是executor,
//用户认为成功或者说想调用’成功’方法或者是想将状态置为成功时使用resolve,并传入成功消息
//反之调用reject,并传入失败原因
executor(reject,resolve);
}catch(error){
//用户主动调用reject和promise内executor运行出错都会调用reject。
reject(error)
}
}
//promise自带方法
then(onFullfilled,onReject){
if(this.status === RESOLVED){
onFullfilled(this.value)
}
if(this.status === REJECT){
onReject(this.reason)
}
}
}
//用户调用promise的时候立即执行promise,改变promise的状态,当用户调用then的时候 传入两个状态对应要执行的方法 promise根据当前状态的不同 选择执行resolve或reject
let myPromise = new Promise((resolve,reject)=>{
resolve(‘成功’)
throw new Error(‘异常’)
reject(‘失败’)
})
myPromise.then((data)=>{
console.log(‘resolve’,data)
}.(err)=>{
console.log(‘reject’,err)
}
})