在 `try...catch` 中捕获到的错误信息如何传递给 `await` 表达式?

简介: 【10月更文挑战第29天】

try...catch 中捕获到错误后,通常不需要将错误信息直接传递给 await 表达式,因为 await 本身的设计目的是暂停异步函数的执行,等待一个 Promise 的结果,而错误处理是通过 try...catch 来完成的。

返回包含错误信息的对象

  • catch 块中,可以将错误信息包装在一个对象中,并将该对象作为异步函数的返回值。这样,在调用异步函数的地方,可以通过判断返回值的类型或属性来获取错误信息。

以下是一个示例:

async function getData() {
   
  try {
   
    // 假设这里是一个可能会出错的异步操作
    const response = await fetch('https://example.com/api/data');
    const data = await response.json();
    return {
    data };
  } catch (error) {
   
    return {
    error: error.message };
  }
}

getData().then(result => {
   
  if (result.error) {
   
    console.log('Error:', result.error);
  } else {
   
    console.log('Data:', result.data);
  }
});

使用自定义的错误类和状态码

  • 可以定义自定义的错误类,并在 catch 块中抛出该自定义错误,同时设置相应的状态码和错误信息。在调用异步函数的地方,可以根据不同的状态码来处理不同类型的错误。

以下是一个示例:

class CustomError extends Error {
   
  constructor(message, statusCode) {
   
    super(message);
    this.statusCode = statusCode;
  }
}

async function getData() {
   
  try {
   
    // 假设这里是一个可能会出错的异步操作
    const response = await fetch('https://example.com/api/data');
    if (!response.ok) {
   
      throw new CustomError('Data fetch failed', response.status);
    }
    const data = await response.json();
    return data;
  } catch (error) {
   
    if (error instanceof CustomError) {
   
      console.log('Custom Error:', error.message, 'Status Code:', error.statusCode);
    } else {
   
      console.log('Other Error:', error.message);
    }
    throw error;
  }
}

try {
   
  await getData();
} catch (error) {
   
  // 可以在这里根据具体的错误进行进一步的处理
}

通过回调函数或事件传递错误信息

  • 如果异步函数的执行结果需要通过回调函数或事件来通知外部代码,可以在回调函数或事件对象中传递错误信息。

以下是一个使用回调函数传递错误信息的示例:

function getData(callback) {
   
  fetch('https://example.com/api/data')
  .then(response => {
   
      if (!response.ok) {
   
        callback(new Error('Data fetch failed'), null);
      } else {
   
        return response.json();
      }
    })
  .then(data => callback(null, data))
  .catch(error => callback(error, null));
}

getData((error, data) => {
   
  if (error) {
   
    console.log('Error:', error.message);
  } else {
   
    console.log('Data:', data);
  }
});

这些方法都可以有效地将 try...catch 中捕获到的错误信息传递到需要的地方,以便进行进一步的处理和反馈。具体使用哪种方法,可以根据项目的具体需求和代码结构来决定。

相关文章
|
8月前
|
C++
C++ 捕获所有异常并拿到错误原因的方法
C++ 捕获所有异常并拿到错误原因的方法
238 0
|
2月前
|
前端开发 JavaScript
使用 try-catch 语句来捕获 Promise 中的异常
【10月更文挑战第26天】使用try-catch语句捕获Promise中的异常是一种非常实用的技术,能够使异步代码的错误处理更加清晰、可控,提高程序的可靠性和稳定性。在实际开发中,合理地运用try-catch语句以及其他相关的错误处理机制,可以有效地应对各种可能出现的异常情况,为用户提供更好的体验。
|
2月前
|
前端开发
|
5月前
|
JavaScript 前端开发 中间件
异步编程中使用 async/await 是否必须包含 try 和 catch 语句以实现错误处理?
异步编程中使用 async/await 是否必须包含 try 和 catch 语句以实现错误处理?
|
5月前
|
安全 Go
|
8月前
|
存储 C++
c++以exception_ptr传递异常
自C++11起,C++标准库提供一个能力:将异常存储于类型为exception_ptr的对象中,稍后才在其他情境(context)中处理它们:
60 0
|
8月前
|
JavaScript 前端开发 开发者
JavaScript中的错误处理:try-catch语句与错误对象
【4月更文挑战第22天】JavaScript中的错误处理通过try-catch语句和错误对象实现。try块包含可能抛出异常的代码,catch块捕获并处理错误,finally块则无论是否出错都会执行。错误对象提供关于错误的详细信息,如类型、消息和堆栈。常见的错误类型包括RangeError、ReferenceError等。最佳实践包括及时捕获错误、提供有用信息、不忽略错误、利用堆栈信息和避免在finally块中抛错。
pywintypes.com_error: (-2147221005, ‘无效的类字符串‘, None, None)
pywintypes.com_error: (-2147221005, ‘无效的类字符串‘, None, None)
1527 0
pywintypes.com_error: (-2147221005, ‘无效的类字符串‘, None, None)
|
8月前
|
存储 缓存 IDE
细琢磨,try catch finally 执行顺序与返回值
细琢磨,try catch finally 执行顺序与返回值
90 0
成功解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
成功解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
成功解决pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)