[Javascript Tips] Use Promise.allSettled instead of Promise.all
JavaScript of use all Promise Tips instead
2023-09-14 09:00:42 时间
Promise.all:
Problem: let's say we have two promises, P1, P2, P1 reject in 1s, and P2 reject in 3s.
What will happen in catch block?
It only able to catch P1's error, P2's error will be unhandled error
function P1() {
return new Promise((res, rej) => {
setTimeout(() => {
rej(new Error("p1"));
}, 1010);
});
}
function P2() {
return new Promise((res, rej) => {
setTimeout(() => {
rej(new Error("p2"));
}, 3000);
});
}
async function main() {
try {
const [r1, r2] = await Promise.all([P1(), P2()]);
} catch (err) {
console.error("main catch", err); // [ERR]: "main catch", p1
}
}
main();
How to solve the problem?
By using Promise.allSettled:
function P1(): Promise<number> {
return new Promise((res, rej) => {
setTimeout(() => {
rej(new Error("err: p1"));
}, 1010);
});
}
function P2(): Promise<number> {
return new Promise((res, rej) => {
setTimeout(() => {
rej(new Error("err: p2"));
}, 3000);
});
}
function handle(results: Array<PromiseSettledResult<number>>) {
results.forEach((res) => {
if (res.status === "fulfilled") {
console.log(res.value);
} else {
console.log(res.reason);
}
});
}
async function main() {
const results = await Promise.allSettled([P1(), P2()]);
handle(results);
/**
* [LOG]: err: p1
[LOG]: err: p2
*/
}
main();
相关文章
- javascript 基础_JavaScript高级编程
- 【说站】javascript中for...of循环的原理
- 【说站】JavaScript for-in和for-of的不同点
- JavaScript学习总结(十七)——Javascript原型链的原理详解编程语言
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- 使用JavaScript在Oracle中执行函数(js执行oracle函数)
- 解锤OracleAS OF模式深入浅出(oracle as of)
- JavaScript单元测试的“抹茶”组合:Mocha和Chai
- Javascript兼容firefox的一些问题
- JavaScript对象链式操作测试代码
- JavaScript设计模式富有表现力的Javascript(一)
- JavaScript正则表达式验证函数代码
- Javascript实现页面跳转的几种方式分享
- 利用noesis.Javascript开源组件.Net中执行javascript脚本
- DojoJavascript编程规范规范自己的JavaScript书写
- Javascript前端UI框架Kit使用指南之kitjs的对话框组件
- Javascript实现图片无缝滚动
- Javascript基础教程之JavaScript语法