Nestjs中OnEvent装饰器async参数差异及promisify参数作用问询
NestJS OnEvent装饰器中async与promisify参数解析
async参数的区别
- 不设置(默认false):监听器同步执行,Nest会等待监听器内的同步代码执行完毕后再推进后续流程,但如果监听器里包含未用
async/await处理的异步操作,Nest不会等待这些异步操作完成,直接继续执行后续逻辑,很容易出现时序错乱的问题。 - 设置为true:Nest会将监听器当作异步函数处理,自动等待监听器内所有异步操作完成后,再继续执行后续逻辑。哪怕你的监听器函数本身没加
async关键字,设置该参数后也会被包装成异步处理,保证执行时序正确。
promisify参数的作用
设置promisify: true后,不管你的监听器是同步还是异步函数,Nest都会把它的返回值包装成Promise对象。这样在调用eventEmitter.emitAsync触发事件时,能统一以Promise的方式处理结果,方便进行错误捕获或者等待所有监听器执行完毕。
举个实际代码例子:
@OnEvent('user.created', { promisify: true }) handleUserCreated() { return '用户创建完成'; } // 调用时可以这样处理 async someFunction() { const result = await this.eventEmitter.emitAsync('user.created'); console.log(result); // 输出 ['用户创建完成'] }
内容的提问来源于stack exchange,提问作者Abbas
相关产品推荐
相关产品推荐

