在 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
中捕获到的错误信息传递到需要的地方,以便进行进一步的处理和反馈。具体使用哪种方法,可以根据项目的具体需求和代码结构来决定。