egg.js如何在进程退出的时候执行资源回收操作?
发布于 5 年前 作者 guohaoyun 3228 次浏览 来自 问答

启动命令: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

但是我发现”异步结束“这句并没有打印出来,所以我有两个问题想请教一下。

  1. 为什么进程没有等待异步操作完成就退出了。
  2. 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);
回到顶部