Skip to content

实现 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;
}