实现 mergePromise
实现 mergePromise 函数,传入的数组按照顺序先后执行,返回的数据需要按照次序放到数组 data 中
js
function time(timer) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, timer);
});
}
const ajax1 = () =>
time(2000).then(() => {
console.log(1);
return 1;
});
const ajax2 = () =>
time(1000).then(() => {
console.log(2);
return 2;
});
const ajax3 = () =>
time(1000).then(() => {
console.log(3);
return 3;
});
mergePromise([ajax1, ajax2, ajax3]).then((data) => {
console.log("done");
console.log(data); // data: [1, 2, 3]
});
// 需要分别输出
// 1
// 2
// 3
// done
// [1, 2, 3]
实现
js
function mergePromise(promises) {
// save every ajax result
const data = [];
let p = Promise.resolve();
for (const promise of promises) {
// 第一次 then 为了用来调用 ajax
// 第二次 then 为了获取 ajax 调用
p = p.then(promise).then((res) => {
data.push(res);
return data;
});
}
return p;
}