JavaScript中如何正确处理异步操作的错误?
JavaScript中如何正确处理异步操作的错误?
回答:
在JavaScript中,处理异步操作的错误应结合使用 try...catch(用于 async/await)和 .catch()(用于 Promise 链),确保所有可能的异常路径都被捕获。
示例:
// 使用 async/await 处理异步错误
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Fetch failed:', error.message);
// 可以重新抛出或返回默认值
throw error;
}
}
// 调用函数时也要处理错误
fetchData().catch(err => {
console.log('Error in fetching data:', err);
});
解析:
- Promise 错误不会被同步 try...catch 捕获:如果使用原始 Promise 且未链式调用
.catch(),错误会静默失败或触发未捕获的 Promise 异常。 - async/await 配合 try...catch 更直观:将异步代码写成同步风格,便于错误处理。
- 网络请求本身可能失败:如 DNS 错误、网络断开,这些都会导致 reject,需在 catch 中处理。
- HTTP 状态码错误不会自动 reject:例如
fetch在 404 或 500 时仍返回 resolve,需手动检查response.ok并抛出错误。 - 全局错误监听(可选):可通过
window.addEventListener('unhandledrejection', ...)监听未捕获的 Promise 错误,用于调试或上报。
因此,正确的异步错误处理需要同时关注 Promise 的 reject 和显式的业务逻辑异常。

发表评论 (审核通过后显示评论):