Promise.allSettled,ES2020新特性对于Pr

2021-08-06  本文已影响0人  O人心

Promise.all方法

// promise all
let p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(11);
 }, 1000);
});
let p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(22);
  }, 2000);
});
// Promise.all([p1, p2]).then(res => {
//     console.log(res);//(2) [11, 22] "r===="
// }).catch(err => {
//     console.log(err);
// })

function myPromiseAll(list) {
  return new Promise((resolve, reject) => {
    let resultsArr = [];
    let num = 0;
    list.forEach((item) => {
      item.then((res) => {
        resultsArr.push(res);
        num++;
        if (num == list.length) {
          resolve(resultsArr);
        }
      });
    });
  });
}
myPromiseAll([p1, p2])
  .then((r) => {
    console.log(r, "r====");//(2) [11, 22] "r===="
  })
  .catch((err) => {
    console.log(err);
  });

使用promise.all如果有一个对象reject了,那么promise.all就会返回错误,promise.all只能返回全部是resolve的结果

image.png

Promise.allSettled方法

  let p3 = new Promise((resolve,reject)=>{
        // resolve(11)
        reject("error======")
   })
   let p4 = new Promise((resolve,reject)=>{
        resolve(222)
  })
  Promise.allSettled([p3,p4]).then(res=>{
       console.log(res);
       //0: {status: "rejected", reason: "error======"}
       //1: {status: "fulfilled", value: 222}
  })

使用promise.allSettled的话,不管是否是reject都会返回,并且返回成功或者失败的status

image.png
上一篇 下一篇

猜你喜欢

热点阅读