errHandler
捕获并处理错误的方式:
- 在
Promise
链式调用中,当 func1
或 func2
抛出错误时,错误会沿着 Promise
链向下传递,直到被 catch
块捕获。errHandler
会捕获到 func1
或 func2
抛出的错误,因为 catch
块会捕获 Promise
链中任何一个环节产生的错误。
- 示例代码如下:
function func1() {
throw new Error('func1 error');
}
function func2() {
console.log('func2 should not be executed');
}
function errHandler(error) {
console.log('Caught error:', error.message);
}
Promise.resolve()
.then(func1)
.then(func2)
.catch(errHandler);
- 如果
func1
返回一个 rejected 的 Promise
,func2
还会执行吗:
- 如果
func1
返回一个 rejected 的 Promise
,func2
不会执行。因为 Promise
链式调用的规则是,只有前一个 then
中的回调函数返回一个 resolved 的 Promise
或者返回一个非 Promise
值(会被自动包装成 resolved 的 Promise
)时,下一个 then
中的回调函数才会执行。当 func1
返回一个 rejected 的 Promise
时,错误会直接被 catch
块捕获,跳过 func2
的执行。
- 示例代码如下:
function func1() {
return Promise.reject(new Error('func1 rejected'));
}
function func2() {
console.log('func2 should not be executed');
}
function errHandler(error) {
console.log('Caught error:', error.message);
}
Promise.resolve()
.then(func1)
.then(func2)
.catch(errHandler);