I have some issues to handle multiple rejections in "parallel".
How to handle rejection in a async function when we "await in parallel".
Here an example :
function in_2_sec(number) {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('Error ' + number);
}, 2000);
})
}
async function f1() {
try {
let a = in_2_sec(3);
let b = in_2_sec(30);
return await a + await b; // awaiting in "parallel"
} catch(err) {
console.log('Error', err);
return false;
}
}
async function f2() {
try {
let a = await Promise.all([in_2_sec(3), in_2_sec(30)]);
return a[0] + a[1];
} catch(err) {
console.log('Error', err);
return false;
}
}
// f1().then(console.log) // UnhandledPromiseRejectionWarning
// f2().then(console.log) // Nice
f1()
create a UnhandledPromiseRejectionWarning
in node, because the second rejection (b) is not handled.
f2()
works perfectly, Promise.all()
do the trick, but how to make a f2()
with only async/await syntax, without Promise.all()
?