通过 .catch() 或 promise.prototype.catch 捕获异常,并在回调中根据错误类型返回新的 promise 或直接抛出映射后的错误对象。这样可以将底层的不规范错误转换为业务层可识别的标准化错误结构。

fetchData 遇到网络超时如何映射为自定义错误?
当 fetchData 发生网络超时时,可以在 .catch 中判断错误实例是否为 TimeoutError,然后构造一个包含 code 和 message 的标准错误对象并重新抛出。调用方即可统一处理这种标准化的错误格式。

function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const err = new Error('Network Timeout');
err.name = 'TimeoutError';
reject(err);
}, 100);
});
}
fetchData()
.then(data => console.log('Success:', data))
.catch(error => {
if (error.name === 'TimeoutError') {
throw { code: 504, message: 'Service Unavailable', type: 'NETWORK' };
}
throw error;
})
.catch(mappedError => {
console.log('Mapped Error:', mappedError.code, mappedError.message);
});
parseJSON` 遇到格式错误时如何映射为验证错误?
在解析 JSON 字符串时,如果 JSON.parse 抛出异常,可以在 .catch 块中检查错误信息是否包含 "Unexpected token",如果是,则将其映射为 ValidationError 类型的错误对象,以便前端展示友好的提示。

function parseJSON(str) {
return new Promise((resolve, reject) => {
try {
resolve(JSON.parse(str));
} catch (e) {
reject(e);
}
});
}
parseJSON('{ invalid json }')
.then(data => console.log('Parsed:', data))
.catch(error => {
if (error.message.includes('Unexpected token')) {
throw { code: 400, message: 'Invalid JSON Format', type: 'VALIDATION' };
}
throw error;
})
.catch(mappedError => {
console.log('Mapped Error:', mappedError.code, mappedError.message);
});
基于程序中某个输入、条件或结果的具体问题
在上述代码中,当输入为 '{ invalid json }' 时,parseJSON 会抛出异常,经过 .catch 映射后,最终输出的错误对象包含 code: 400 和 type: 'VALIDATION'。这证明了错误映射机制能够成功将底层语法错误转换为业务层的验证错误。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











