Interview icon indicating copy to clipboard operation
Interview copied to clipboard

第295题(2020-09-05):Promise.all中任何一个Promise出现错误的时候都会执行reject,导致其它正常返回的数据也无法使用。你有什么解决办法么?

Open qappleh opened this issue 5 years ago • 2 comments
trafficstars

qappleh avatar Sep 05 '20 01:09 qappleh

const p1 = new Promise((resolve, reject) => { setTimeout( resolve, 200, { data: 1 }); });

const p2 = new Promise((resolve, reject) => { setTimeout( resolve, 500, { data: 2 }); });

const p3 = new Promise((resolve, reject) => { setTimeout( reject, 300, { data: 3 }); });

function warpP(p) { return new Promise((resolve, reject) => { p.then((res)=> resolve(res)).catch(() => resolve(false)) }) }

(function getData() { Promise.all([warpP(p1), warpP(p2), warpP(p3)]) .then((res) => console.log(res)) .catch((err) => console.log(err)); })();

laiyaoWeb avatar Sep 07 '20 02:09 laiyaoWeb

function genPromise(flag) {
  return new Promise((resolve, reject) => {
    if (flag) {
      resolve(flag);
    } else {
      reject(new Error(flag));
    }
  });
}

Promise.allSettled([genPromise(true), genPromise(false)])
  .then((res) => {
    console.log(res);
  })
  .catch((err) => {
    console.error(err.reason);
  });

IWANABETHATGUY avatar Apr 15 '21 14:04 IWANABETHATGUY