至此,我们的Promise就简单实现了,只是我们不是原生代码,不能做成微任务,如果一定要做成微任务的话,只能用其他微任务API模拟,比如MutaionObserver或者process.nextTick。下面再回顾下几个要点:
Promise其实是一个发布订阅模式
then方法对于还在pending的任务,其实是将回调函数onFilfilled和onRejected塞入了两个数组
Promise构造函数里面的resolve方法会将数组onFilfilledCallbacks里面的方法全部拿出来执行,这里面是之前then方法塞进去的成功回调
同理,Promise构造函数里面的reject方法会将数组onRejectedCallbacks里面的方法全部拿出来执行,这里面是之前then方法塞进去的失败回调
then方法会返回一个新的Promise以便执行链式调用
catch和finally这些实例方法都必须返回一个新的Promise实例以便实现链式调用