实现mergePromise函数,把传进去的数组顺序先后执行,并且把返回的数据先后放到数组data中.
const asyncFun = ms = > new Promise((resolve,reject)=>{
//此处 用 setTimeout 模拟 异步操作
setTimeout(()=>{
resolve();
},ms);
});
//asyncFun 最终 会 返回 一个 promise 对象
const fn1 = ()=>asyncFun(6000).then(()=>{
console.log(1);
return 1;
});
const fn2 = ()=> asyncFun(2000).then(()=>{
console.log(2);
return 2;
});
const fn3 = ()=> asyncFun(1000).then(()=>{
console.log(3);
return 3;
});
const mergePromise = asyncArray = >{
return new Promise(resolve=>{
let data = [];
//启用 一个 promise 引用 Promise.resolve(value)方法返回一个以给定值解析后的Promise 对象
let promise = Promise.resolve();
asyncArray.forEach(asyncFun =>{
promise = promise.then(asyncFun).then(res=>{
data.push(res);
});
});
return promise.then(()=>{
resolve(data);
})
})
}
mergePromise([fn1,fn2,fn3]).then(data=>{
console.log('done');
console.log(data);
})
//最终 打印出
// 1
// 2
// 3
// done
// [1,2,3]