面试题答案
一键面试使用 .catch
方法
- 原理:在Promise链中,任何一个
then
回调函数抛出错误或返回一个被拒绝的Promise时,错误会沿着Promise链向后传递,直到遇到.catch
方法。.catch
方法会捕获这些错误,并执行相应的错误处理逻辑。 - 适用场景:适用于整个Promise链中通用的错误处理场景,即无论哪个环节出错,都可以用相同的逻辑来处理错误。例如,在一个复杂的异步操作链中,无论哪个步骤失败,都统一记录错误日志并向用户显示友好的错误提示。
在每个 then
回调函数中处理错误
- 原理:在每个
then
回调函数内部,使用try...catch
语句块来捕获同步错误,并手动处理返回被拒绝的Promise的情况。这样可以针对每个具体的异步操作进行细粒度的错误处理。 - 适用场景:当不同的异步操作需要不同的错误处理逻辑时使用。比如,在一个文件上传操作的Promise链中,读取文件的步骤和上传文件的步骤可能会出现不同类型的错误,需要分别进行针对性处理。
使用 Promise.allSettled
- 原理:
Promise.allSettled
方法接收一个Promise数组作为参数,返回一个新的Promise。当所有输入的Promise都已被解决(resolved或rejected)时,这个新的Promise被解决。它会返回一个包含每个Promise结果(无论是成功还是失败)的数组,通过检查每个结果的status
属性("fulfilled"
或"rejected"
)来判断并处理错误。 - 适用场景:当需要确保所有的Promise都执行完毕,无论它们是成功还是失败,并且需要统一处理所有结果(包括错误)时使用。例如,同时发起多个API请求获取不同的数据,无论哪个请求失败,都要汇总所有请求的结果进行展示。