Error.cause和AggregateError高级错误处理
请解释ES2022引入的Error.cause属性和AggregateError的用法,并用示例说明在嵌套错误处理中的价值。
回答
苦行僧
async function fetchUser(id) {
try {
const res = await fetch(`/api/users/${id}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`, { cause: res });
return await res.json();
} catch (err) {
throw new Error(`获取用户${id}失败`, { cause: err });
}
}
async function processUserData(id) {
try {
const user = await fetchUser(id);
} catch (err) {
console.error(err.message);
console.error(err.cause?.message);
console.error(err.cause?.cause?.status);
}
}
Promise.any([
Promise.reject(new Error('API-1失败')),
Promise.reject(new Error('API-2失败')),
]).catch(err => {
console.log(err instanceof AggregateError);
console.log(err.errors);
});
价值:Error.cause保留完整错误链便于调试;AggregateError适合并发操作的批量错误处理。