[Javascript Tips] Use Promise.allSettled instead of Promise.all
JavaScript of use all Promise Tips instead
2023-09-14 08:59:11 时间
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 CSS Style属性对照表「建议收藏」
- 《The Joy of Javascript》- 2 - Functor/Monad
- 【说站】JavaScript for-in和for-of的不同点
- Vue项目打包报错:JavaScript heap out of memory
- Open Source Customer Support Chat System Implementation Of Pop-up Effect JavaScript SDK
- 《JavaScript高级程序设计》读书笔记
- 解锤OracleAS OF模式深入浅出(oracle as of)
- 数据排序谁最快(javascript中的Array.prototype.sortPK快速排序)
- Javascript更新JavaScript数组的uniq方法
- javascript得到XML某节点的子节点个数的脚本
- JavaScript验证浏览器是否支持javascript的方法小结
- Javascript小写字母依次变为大写
- Javascript学习笔记9prototype封装继承
- Javascript面向对象继承
- JavaScript设计模式富有表现力的Javascript(一)
- JavaScript高级程序设计阅读笔记(十六)javascript检测浏览器和操作系统-detect.js
- javascript的字符串按引用复制和传递,按值来比较介绍与应用
- JavaScript中按位“异或”运算符使用介绍
- javascript实现十六进制颜色值(HEX)和RGB格式相互转换
- 5个JavaScript经典面试题
- 推荐JavaScript实现继承的最佳方式
- JavaScript中伪协议javascript:使用探讨