我在async functions
上捕获错误时遇到了一些问题,这些错误是由emit
上的eventEmitter
运行的。
下面是代码:
const EventEmitter = require('events')
const eventEmitter = new EventEmitter()
eventEmitter.addListener('callSyncFunction', syncFunction)
eventEmitter.addListener('callAsyncFunction', asyncFunction)
function syncFunction() {
throw new Error('Sync function error')
}
async function asyncFunction() {
throw new Error('Async function error')
}
try {
eventEmitter.emit('callSyncFunction')
} catch(e) {
console.log(e)
}
// Works and prints 'Sync function error'
try {
eventEmitter.emit('callAsyncFunction')
} catch(e) {
console.log(e)
}
// Does not work and gives an Unhandled promise rejection
我可以在eventEmitter
调用同步函数时捕获错误,但无法在异步函数运行时捕获错误。根据www.example.com上的建议,我尝试启用captureRejections: true
,但它仍然无助于捕获这些错误。https://nodejs.org/api/events.html#events_capture_rejections_of_promises I tried enabled captureRejections: true
but it still does not help capture those errors.
除了使用像emittery这样的库之外,还有什么解决方案吗?
4条答案
按热度按时间zhte4eai1#
不能使用nodejs EventEmitter从异步侦听器捕获错误。
emit
方法是完全同步的。设置capture Rejections: true
只允许您通过error
事件捕获异步错误。您应该为此使用一些第三方库,例如EventEmitter2abithluo2#
为什么不创建一个 Package 器监听器并在其中解析
Async
函数62lalag43#
我最终使用这个 Package 器来实现我的目的:events-async.
csga3l584#
很简单,使用'error'事件:
给定:
GIVEN:错误处理
何时
然后
预期控制台输出: