手写实现Promise思路
改变一下思路 抄一下作业
每次then方法中把回调函数推入一个数组,真正执行是在resolve方法中执行数组里的方法
function MyPromise(fn){
var that = this
var value =‘hhh’
var callbacks = []
var resolve = function (){
if(callbacks.length) callbacks0
}
this.then = function(fn2){
callbacks.push(fn2)
}
fn(resolve)
}
function Promise(fn){
//需要成功以及成功时的回调
var doneList = [];
var value =‘hhh’
//一个实例的方法,用来注册异步事件
this.then = function(done ,fail){
doneList.push(done);
return this;
}
function resolve(v){
setTimeout(function(){
value = v
doneList.forEach(function(fulfill){
fulfill(value);
});
},0)
}
fn(resolve);
}
function fn(resolve){
resolve(“success 1”)
}
function fn2(resolve){
resolve(“success 2”)
}
new Promise(fn2).then(function(val) {
console.log(‘callback------’,val)
})
resolve里的回调函数调用需要是异步的,这可以保证数组中已经注册好了所有的回调函数,再执行