跳至主要內容

async await

chanchaw小于 1 分钟javascript

捕捉异常

catch捕捉异常

使用代码 const aa = await getName() 时需要使用 catch 捕捉异常,相反,如果异步方法 getName()async 函数中 A 中调用了 reject 同时又没有使用 catch 捕捉异常则当前 const aa = await getName() 所在的函数 A 会被中断 - 不再执行 const aa = await getName() 后面的逻辑,案例代码如下

// 语法
try {
  // 可能会抛出错误的代码
} catch (error) {
  // 捕获并处理错误
} finally {
  // 无论是否抛出错误,都会执行的代码(可选)
}

不使用 try/catch 的替代方案

async function fetchData() {
  const response = await fetch("https://api.example.com/data");
  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
  }
  return response.json();
}

// 调用处使用 Promise.catch 捕获错误
fetchData()
  .then(data => {
    console.log("Data:", data);
  })
  .catch(error => {
    console.error("Error fetching data:", error);
  });

或者在 await 后面立即使用 catch 捕捉异常,相对于 try/catch ,前者可以为一个 async 函数中的多个异步请求独立处理异常,而后者 try/catch 可以在包裹所有异步请求后统一做处理

async function fetchData() {
  const response = await fetch('https://api.example.com/data').catch(error => {
    console.error('Request failed:', error);
    return null; // 返回兜底值
  });
  if (!response) return;
  // 继续处理 response...
}