在 puppeteers 侦听器的回调之外捕获错误 page.on
Catch error outside callback of puppeteers listener page.on
我在使用 puppeteer 进行端到端测试时遇到了以下问题。
我尝试在页面侦听器之外捕获抛出的错误。不幸的是,它在 page.on(木偶操纵者)侦听器的回调之外不可访问。
(async () => {
try {
// http error handling
page.on('response', response => {
if (!response.ok() && response.request().resourceType() === 'xhr')
throw new Error('HTTP Error occurred');
});
} catch (err) {
// want to catch error here
console.log('error while running end-2-end test');
process.exit(1);
}
})();
我只记录UnhandledPromiseRejectionWarning
使用 EventEmitter
您可以在 eventEmitter 上创建一个实例来侦听某些错误或自定义事件。
// create your own error catching event
const events = require('events');
const catchErrors = new events.EventEmitter();
catchErrors.on('error', (err) => console.error(err));
稍后,
page.on('response', response => {
if (!response.ok() && response.request().resourceType() === 'xhr')
catchErrors.emit('error', new Error('HTTP Error occurred'));
});
捕获所有错误
process.on('unhandledRejection', error => {
console.log('unhandledRejection', error.message);
});
这是异步代码的常见问题。尽管您的代码看起来异常是在 try-catch 块内抛出的,但您为 page.on
函数提供的函数是 运行 之后的,因此不会捕获内部抛出的任何错误。
因此,您必须将 try-catch 块移动到函数中(以防 throw new Error
只是示例代码)。如果需要,您仍然可以从 catch 块内部调用外部作用域中的函数。或者,您可以只删除 throw
语句并直接调用 handleError
函数。
function handleError(err) {
// handle the error
}
page.on('response', response => {
try {
if (!response.ok() && response.request().resourceType() === 'xhr') {
throw new Error('HTTP Error occurred');
}
} catch (err) {
handleError(err);
}
});
我在使用 puppeteer 进行端到端测试时遇到了以下问题。
我尝试在页面侦听器之外捕获抛出的错误。不幸的是,它在 page.on(木偶操纵者)侦听器的回调之外不可访问。
(async () => {
try {
// http error handling
page.on('response', response => {
if (!response.ok() && response.request().resourceType() === 'xhr')
throw new Error('HTTP Error occurred');
});
} catch (err) {
// want to catch error here
console.log('error while running end-2-end test');
process.exit(1);
}
})();
我只记录UnhandledPromiseRejectionWarning
使用 EventEmitter
您可以在 eventEmitter 上创建一个实例来侦听某些错误或自定义事件。
// create your own error catching event
const events = require('events');
const catchErrors = new events.EventEmitter();
catchErrors.on('error', (err) => console.error(err));
稍后,
page.on('response', response => {
if (!response.ok() && response.request().resourceType() === 'xhr')
catchErrors.emit('error', new Error('HTTP Error occurred'));
});
捕获所有错误
process.on('unhandledRejection', error => {
console.log('unhandledRejection', error.message);
});
这是异步代码的常见问题。尽管您的代码看起来异常是在 try-catch 块内抛出的,但您为 page.on
函数提供的函数是 运行 之后的,因此不会捕获内部抛出的任何错误。
因此,您必须将 try-catch 块移动到函数中(以防 throw new Error
只是示例代码)。如果需要,您仍然可以从 catch 块内部调用外部作用域中的函数。或者,您可以只删除 throw
语句并直接调用 handleError
函数。
function handleError(err) {
// handle the error
}
page.on('response', response => {
try {
if (!response.ok() && response.request().resourceType() === 'xhr') {
throw new Error('HTTP Error occurred');
}
} catch (err) {
handleError(err);
}
});