手写Promise.All,通俗易懂版

91 阅读1分钟

可选择判断入参类型是否是Promise

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(() => resolve(100), 500);
});
const promise4 = 111;

Promise.myAll = (promiseList) => {
  return new Promise((resolve, reject) => {
    let list = [];
    let num = 0;
    for (let index in promiseList) {
      /** 校验是否是 Promise */
      //   if (promiseList[index] instanceof Promise) {
      //     promiseList[index].then((res) => {
      //       list[index] = res;
      //       num += 1;
      //       if (num === promiseList.length) return resolve(list);
      //     });
      //   } else {
      //     list[index] = promiseList[index];
      //     num += 1;
      //     if (num === promiseList.length) return resolve(list);
      //   }
      /** 不校验是否是 Promise */
      Promise.resolve(promiseList[index]).then((res) => {
        list[index] = res;
        num += 1;
        if (num === promiseList.length) return resolve(list);
      });
    }
  });
};
Promise.myAll([promise1, promise3, promise2, promise4]).then((res) => {
  console.log(res, "???????");
});