MST

星途 面试题库

面试题:Node.js异常监控中如何捕获未处理的Promise拒绝

在Node.js应用中,经常会使用Promise进行异步操作。请描述如何全局捕获未处理的Promise拒绝,并举例说明如何在捕获后进行适当的日志记录,以方便定位问题。
50.0万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

在Node.js中,可以通过process.on('unhandledRejection')事件来全局捕获未处理的Promise拒绝。以下是具体实现步骤和示例:

  1. 捕获未处理的Promise拒绝: 在Node.js应用的入口文件(通常是app.jsindex.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);
});
  1. 示例: 假设我们有一个简单的异步函数,它会随机拒绝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拒绝,并进行适当的日志记录。