技术文摘
Promise.allSettled 的作用及自行实现方法
2024-12-31 06:09:44 小编
Promise.allSettled 的作用及自行实现方法
在 JavaScript 的异步编程中,Promise 是一种强大的工具。其中,Promise.allSettled 方法在处理多个异步操作时具有独特的作用。
Promise.allSettled 用于等待多个 Promise 全部完成(无论是成功完成还是失败拒绝),并返回每个 Promise 的结果。这与 Promise.all 不同,Promise.all 只要有一个 Promise 失败就会立即抛出错误,而 Promise.allSettled 则会收集所有 Promise 的结果,无论成功还是失败。
它的主要作用在于可以更全面地获取多个异步操作的最终状态,避免因为一个操作的失败而导致整个组合操作的中断。这在需要对多个异步任务的结果进行统一处理,而不关心个别任务是否失败的场景中非常有用。
接下来,让我们尝试自行实现一个简单的 Promise.allSettled 方法。
function allSettled(promises) {
let results = [];
let fulfilledCount = 0;
let rejectedCount = 0;
return new Promise((resolve) => {
promises.forEach((promise, index) => {
promise
.then((value) => {
results[index] = { status: 'fulfilled', value };
fulfilledCount++;
if (fulfilledCount + rejectedCount === promises.length) {
resolve(results);
}
})
.catch((reason) => {
results[index] = { status:'rejected', reason };
rejectedCount++;
if (fulfilledCount + rejectedCount === promises.length) {
resolve(results);
}
});
});
});
}
在上述实现中,我们创建一个新的 Promise,并遍历输入的 Promise 数组。对于每个 Promise,分别处理其成功和失败的情况,并将结果存储在 results 数组中。当所有 Promise 都完成后,最终的结果数组被 resolve 出来。
Promise.allSettled 为处理多个异步操作的结果提供了一种更灵活和全面的方式,通过自行实现,我们能更深入地理解其工作原理和价值。在实际开发中,根据具体的业务需求,合理选择和运用 Promise.allSettled 可以使异步代码更加健壮和易于维护。
- 苹果推送 macOS Catalina 10.15.3 开发者预览版 Beta 1 最新系统
- Win11 安装双系统未出现选项的解决办法及开机选择系统的方法
- 如何删除 macOS Catalina 中的 iPhone 备份文件
- macOS Catalina10.15.2 是否值得升级及更新内容
- macOS Catalina10.15.1 升级价值与更新内容探讨
- Win11 全新界面与功能披露 文件资源管理器迎重大更新
- 如何解决 macOS 频繁弹出输入密码窗口或提示存储钥匙串的问题
- 苹果 Mac 禁止特定应用联网的方法教程
- Win11 退回 Win10 无反应的解决之道
- Win11 Build 2262x.1546 预览版 KB5025310 补丁发布及更新修复内容汇总
- 微软发布 Windows Server vNext 预览版 25335 新动态
- 如何修改 Mac 系统聚焦功能默认的快捷键
- Mac 安装软件提示已损坏的解决之道
- Win11 安装 VMware 后无法找到 WiFi 网络的解决之道
- macOS Catalina 不兼容的 235 个应用程序盘点