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);
});

解析:

  1. Promise 错误不会被同步 try...catch 捕获:如果使用原始 Promise 且未链式调用 .catch(),错误会静默失败或触发未捕获的 Promise 异常。
  2. async/await 配合 try...catch 更直观:将异步代码写成同步风格,便于错误处理。
  3. 网络请求本身可能失败:如 DNS 错误、网络断开,这些都会导致 reject,需在 catch 中处理。
  4. HTTP 状态码错误不会自动 reject:例如 fetch 在 404 或 500 时仍返回 resolve,需手动检查 response.ok 并抛出错误。
  5. 全局错误监听(可选):可通过 window.addEventListener('unhandledrejection', ...) 监听未捕获的 Promise 错误,用于调试或上报。

因此,正确的异步错误处理需要同时关注 Promise 的 reject 和显式的业务逻辑异常。

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

昵称:
邮箱:
内容: