Interview
Interview copied to clipboard
第295题(2020-09-05):Promise.all中任何一个Promise出现错误的时候都会执行reject,导致其它正常返回的数据也无法使用。你有什么解决办法么?
trafficstars
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)); })();
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);
});