面试题答案
一键面试在Node.js中,可以通过process.on('unhandledRejection')
事件来全局捕获未处理的Promise拒绝。以下是具体实现步骤和示例:
- 捕获未处理的Promise拒绝:
在Node.js应用的入口文件(通常是
app.js
或index.js
)中添加以下代码:
process.on('unhandledRejection', (reason, promise) => {
// 这里`reason`是Promise被拒绝的原因,`promise`是被拒绝的Promise对象
console.log('Unhandled Rejection at:', promise, 'reason:', reason);
// 进行日志记录,例如使用`console.error`输出到控制台,也可以使用专门的日志库如`winston`
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
});
- 示例: 假设我们有一个简单的异步函数,它会随机拒绝Promise:
function asyncFunction() {
return new Promise((resolve, reject) => {
const shouldReject = Math.random() > 0.5;
if (shouldReject) {
reject(new Error('随机拒绝'));
} else {
resolve('成功');
}
});
}
asyncFunction().then(result => {
console.log(result);
});
在上述代码中,如果asyncFunction
返回的Promise被拒绝,且没有在.then()
链中处理,process.on('unhandledRejection')
就会捕获到这个拒绝,并输出相关信息,方便定位问题。
通过这种方式,我们可以在全局层面捕获未处理的Promise拒绝,并进行适当的日志记录。