面试题答案
一键面试在JavaScript中,当一个异步函数调用另一个异步函数,且两者都可能抛出异常时,可以使用try...catch
块来捕获异常,确保异常能在整个调用链中得到合适的处理,同时不丢失关键错误信息。以下是一个代码示例:
// 模拟一个异步函数,可能会抛出异常
async function asyncFunction1() {
// 这里简单模拟一个可能失败的操作,例如随机抛出异常
if (Math.random() > 0.5) {
throw new Error('asyncFunction1 failed');
}
return 'asyncFunction1 success';
}
// 调用 asyncFunction1 的异步函数
async function asyncFunction2() {
try {
const result = await asyncFunction1();
console.log(result);
return 'asyncFunction2 success';
} catch (error) {
// 捕获 asyncFunction1 抛出的异常,并可以在这里进一步处理
console.error('Error in asyncFunction2:', error.message);
throw error; // 重新抛出异常,让调用 asyncFunction2 的地方也能处理该异常
}
}
// 调用 asyncFunction2
async function main() {
try {
const finalResult = await asyncFunction2();
console.log(finalResult);
} catch (error) {
// 捕获 asyncFunction2 抛出的异常
console.error('Final error:', error.message);
}
}
main();
在上述代码中:
asyncFunction1
是一个异步函数,它有可能抛出异常。asyncFunction2
调用了asyncFunction1
,通过try...catch
块捕获asyncFunction1
抛出的异常。如果捕获到异常,打印错误信息并重新抛出,这样调用asyncFunction2
的地方也能处理该异常。main
函数调用asyncFunction2
,同样使用try...catch
块捕获asyncFunction2
抛出的异常,确保整个调用链中的异常都能得到处理,并且关键错误信息不会丢失。