//實現mergePromise函數,把傳進去的數組順序先后執行,//并且把返回的數據先后放到數組data中const timeout = ms => new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, ms);
});const ajax1 = () => timeout(2000).then(() => { console.log('1'); return 1;
});const ajax2 = () => timeout(1000).then(() => { console.log('2'); return 2;
});const ajax3 = () => timeout(2000).then(() => { console.log('3'); return 3;
});function mergePromise(ajaxArray){ let arr = []; let p = Promise.resolve();
ajaxArray.forEach(item=>{
p = p.then(data=>{ if(data){
arr.push(data);
} return item();
});
}) return p.then(data=>{
arr.push(data); return arr;
})
}
mergePromise([ajax1, ajax2, ajax3]).then(data => { console.log('done'); console.log(data); // data 為 [1, 2, 3]});// 分別輸出// 1// 2// 3// done// [1, 2, 3]這個mergePromise的原理是什么?每次重寫了p?Promise.resolve?
這個mergePromise方法是怎么解決這個問題的?
ABOUTYOU
2018-08-26 10:51:00