egg.js如何在进程退出的时候执行资源回收操作?
启动命令:egg-scripts start --title=egg-server-example
停止命令:egg-scripts stop --title=egg-server-example
我希望在进程收到停止信号后,执行一个异步操作,并等待它返回之后再退出。 目前我是这么做的,请看 app.js 代码
const Logger = require('egg-logger').Logger;
const FileTransport = require('egg-logger').FileTransport;
class AppBootHook {
constructor(app) {
this.app = app;
}
async serverDidReady() {
const logger = new Logger();
logger.set('file', new FileTransport({
file: './log',
level: 'INFO',
}));
// 注意,SIGTERM 不支持 windows 系统
process.on('SIGTERM', async () => {
logger.info('异步开始');
await require('bluebird').delay(3000); // 模拟异步操作
logger.info('异步结束');
});
}
}
module.exports = AppBootHook
但是我发现”异步结束“这句并没有打印出来,所以我有两个问题想请教一下。
- 为什么进程没有等待异步操作完成就退出了。
- egg如何在进程退出前,进行资源回收?(回收操作是异步的,且必须完成后才退出进程)
这是最小复现的仓库地址
1 回复
供参考:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
process.on('SIGINT', async () => {
console.log('我要推出了');
process.exit();
});
app.listen(3000);