手写Promise.all

8 阅读1分钟

input

一个数组,数据中的每个元素是一个返回Promise对象的函数

output

Promise<boolean>: 如果所有promise对象都进入了Resolved(Fullfilled)状态,返回true,否则返回false

实现

function MyPromiseAll(asyncFunctions){
  const n = asyncFunctions.length;
  if (n <= 0) return Promise.resolve(true);
  
  let counter = 0;
  
  return new Promise((resolve) => {
    asyncFunctions.forEach(fn => {
      fn()
        .then(() => {
        counter++;
        if (counter === n) resolve(true);
        })
        .catch(() => {
          resolve(false);
        })
    })
  })
  
}