技术文摘
JavaScript中Promise.all()方法和Promise.allSettled()方法的区别
JavaScript 中 Promise.all() 方法和 Promise.allSettled() 方法的区别
在 JavaScript 的异步编程中,Promise 是一个重要的概念,而 Promise.all() 和 Promise.allSettled() 这两个方法,在处理多个 Promise 时发挥着关键作用,但它们之间存在明显区别。
首先来看 Promise.all() 方法。它接收一个 Promise 对象的数组作为参数,只有当数组中的所有 Promise 都成功时,Promise.all() 才会成功。此时,它返回的新 Promise 会 resolve 一个包含所有 Promise 结果的数组,且这个结果数组的顺序与传入的 Promise 数组顺序一致。例如,我们有三个 Promise,分别执行不同的异步操作,只有当这三个操作都顺利完成,Promise.all() 才会继续向下执行。一旦其中任何一个 Promise 被 reject,Promise.all() 就会立即停止,并 reject 第一个被 reject 的 Promise 的理由,后续的 Promise 即便还在执行也不会再被处理。这种特性使得 Promise.all() 适用于需要所有异步操作都成功完成才能继续下一步的场景,比如同时发起多个 API 请求,只有当所有请求都成功获取数据后,才进行页面渲染等操作。
再说说 Promise.allSettled() 方法。同样接收一个 Promise 对象数组作为参数,但它的行为与 Promise.all() 有很大不同。无论数组中的 Promise 是成功还是失败,Promise.allSettled() 都会继续执行,直到所有 Promise 都有了结果(成功或失败)。它返回的新 Promise 会 resolve 一个包含每个 Promise 结果的数组,这个结果数组中的每个元素都包含 status("fulfilled" 或 "rejected")以及对应的 value 或 reason。这意味着,我们可以清晰地了解到每个 Promise 的最终状态。例如在批量上传文件时,即便有部分文件上传失败,我们也能通过 Promise.allSettled() 知道哪些文件上传成功,哪些失败,从而进行针对性处理。
Promise.all() 注重所有 Promise 的成功,只要有一个失败就会中断;而 Promise.allSettled() 更关注所有 Promise 的最终状态,无论成功与否都会完成操作并给出详细结果。开发者在实际应用中,需要根据具体的业务需求来选择合适的方法,以实现高效、稳定的异步编程。
TAGS: 方法区别 JavaScript_Promise Promise_all Promise_allSettled
- Win11 24H2 更新现新 Bug 致使 8.63GB 缓存无法清理
- 微软 Win11 24H2 SMB 传输慢 千兆网络变百兆 用户反馈问题
- Win10 Beta / RP 19045.4713 补丁 KB5040525 及更新内容
- Win10 中打印机打印浓度的调整及清晰度设置方法
- Win10 内部版本 19044.4651 与 19045.4651 迎来更新补丁 KB5040427(附更新汇总)
- 如何使用 Mac filevault 文件保险箱加密 macOS 数据
- Mac 电脑查看 CPU 使用率的方法及技巧
- 哪些 Mac 能够升级 macOS 15 Sequoia?支持机型汇总列表
- 苹果 macOS 15 设置界面重大更新:优化选项布局 重新设计图标
- 如何在 VMware 虚拟机中复制/克隆/导出 VMDK 文件
- 华为纯血鸿蒙 HarmonyOS NEXT 公测开启 申请方法在此
- 鸿蒙 HarmonyOS NEXT Beta 招募已启动 预计月底推送
- 鸿蒙 NEXT 公测版上手:多处体验提升
- MacOS 键盘符号与修饰键说明 助新手告别抓瞎
- Mac 外接硬盘图标在桌面的隐藏技巧