面试题答案
一键面试- 如果
func1
抛出错误,func2
还会执行吗?func2
不会执行。当func1
抛出错误时,这个错误会沿着Promise链传递,导致后续的then
回调(这里是func2
)被跳过。
errorHandler
会捕获到这个错误吗?errorHandler
会捕获到这个错误。catch
块会捕获Promise链中任何一个then
回调抛出的错误。
- 如果
func2
中也抛出错误,它是如何被处理的?- 如果
func2
抛出错误,同样会被catch
块(即errorHandler
)捕获并处理。
- 如果
代码示例:
function func1() {
throw new Error('func1 error');
}
function func2() {
console.log('This should not be printed if func1 throws');
}
function errorHandler(error) {
console.error('Caught error:', error.message);
}
Promise.resolve()
.then(func1)
.then(func2)
.catch(errorHandler);
在上述代码中,func1
抛出错误,因此func2
不会执行,errorHandler
会捕获并打印func1
抛出的错误。
如果我们修改代码,让func1
不抛出错误,func2
抛出错误:
function func1() {
return 'func1 result';
}
function func2(result) {
console.log(result);
throw new Error('func2 error');
}
function errorHandler(error) {
console.error('Caught error:', error.message);
}
Promise.resolve()
.then(func1)
.then(func2)
.catch(errorHandler);
此时,func1
正常执行并返回结果,func2
会执行并在执行过程中抛出错误,这个错误会被errorHandler
捕获并打印。