首先先看一下他们出现在哪里?
new Promise((resolve,reject)=>{
resolve();
}).then(ret=>{
})
简单来说:new Promise(excutor)
excutor(resolve,reject)
then(onFulfilled,onRejected)
onXXX是事件处理函数也就是事件回调函数的标准写法。
当一个承诺被解决时,任何当前或未来的 onFullfilled 函数都将被调用,该函数的参数是 resolve 函数的值
与拒绝/onRejected 类似
当resolve调用之后,它里面传入的参数会在then的第一个参数的函数中被赋值。
基本上,resolve要保证在excutor那个回调函数的那一轮事件循环之后的事件循环被调用。
当resolve被调用后,任何onFulfilled函数都将被调用。
而onFulfilled函数是then的第一个回调函数。
then和excutor公用一个事件循环,而excutor里的resolve,和then里的fullfiled共用一个事件循环。
下面是代码:
function resolve(value){
if(value instanceof Promise) return value.then(this.resolve,this.reject);
setTimeout(()=>{
if(this.statue!==Promise1.PEDDINg) return;
this.status=Promise1.FULFILLED;
this.value=value;
this.onFulfilledCallback.forEach(cb=>cb(value));
})
}