如何捕获Oak框架中listen方法抛出的错误?
在Oak框架中正确捕获listen错误的方法
问题出在app.listen是异步方法,它返回一个Promise,你当前的同步try/catch无法捕获异步Promise的拒绝错误,所以才会被Deno的全局错误处理先捕获。
解决方式有两种:
1. 使用async/await配合try/catch
把代码放在async函数里,用await等待app.listen完成,这样就能在try/catch里捕获错误:
async function startServer() { try { await app.listen({ port: 3000 }); logger.info('Listening...'); } catch (e) { handleTheError(e); // 可在此执行日志记录、资源清理等操作 } } startServer();
2. 使用Promise的.catch()方法
直接链式调用app.listen的catch方法处理错误:
app.listen({ port: 3000 }) .then(() => { logger.info('Listening...'); }) .catch((e) => { handleTheError(e); });
两种方式都能正确捕获端口占用、权限不足等启动阶段的错误,不会被Deno全局错误处理抢先捕获。
内容的提问来源于stack exchange,提问作者Hayden
相关产品推荐
相关产品推荐

