promise all的实现


function isPromise(obj) {
  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';  
}

function myPromiseAll(arr) {
  let result = [];
  return new Promise((resolve, reject) => {
    let index = 0
    for (let i = 0;i < arr.length;i++){
      if(isPromise(arr[i])){
        arr[i].then((value) => {
          result[i] = value
          if (result.length == arr.length) {
            resolve(result)
          }
        },reject)
      } else {
        result[i] = arr[i];
      }
    }
  }) 
}

let p1 = Promise.resolve(3);
let p2 = 1337;
let p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
}); 
myPromiseAll([p1, p2, p3]).then(values => { 
  console.log(values); // [3, 1337, "foo"] 
})


let p1 = new Promise((resolve, reject) => { 
  setTimeout(resolve, 1000, 'one'); 
}); 
let p2 = new Promise((resolve, reject) => { 
  setTimeout(resolve, 2000, 'two'); 
});
let p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, 'three');
});
let p4 = new Promise((resolve, reject) => {
  setTimeout(resolve, 4000, 'four');
});
let p5 = new Promise((resolve, reject) => {
  reject('reject');
});

myPromiseAll([p1, p2, p3, p4, p5]).then(values => { 
  console.log(values);
}, reason => {
  console.log(reason);// reject
});
发布了235 篇原创文章 · 获赞 88 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/qq_34629352/article/details/105348196