const Koa = require('koa')
const sleep = require('sleep-promise')
const app = new Koa()
async function asyncWork() {
await sleep(10000)
console.log('Done async work')
}
app.use(async ctx => {
console.log('got request')
asyncWork().catch(console.error)
ctx.body = 'Hello World'
})
app.listen(3000)
当停掉这个 server 时(SIGTERM 或 SIGINT),不管 asyncWork 有没有完成, node 进程都会立刻退出,如何等待 asyncWork 完成再退出?
注意:asyncWork 是特意没有 await 的,有 await 的情况我知道如何 graceful shutdown
pm2进程管理是可以实现的
这个问题需要知道当前正在执行的异步任务有哪些,以及哪些异步任务是循环执行的,比如setInterval 目前我是不知道有什么办法能够获取到,可以考虑只对重要的任务做特殊处理,其它不重要的就不管了
@jjeejj 如何实现呀?
看你的标题还以为是pm2,你的意思是说 app.use(async ctx => { console.log(‘got request’) asyncWork().catch(console.error) ctx.body = 'Hello World’ shutdown ? }) 不是很理解你这里的停掉这个server 是什么意思 我猜可能有两种情况,一种是我上面说的,你在asyncWork执行后同一个代码块里进行shutdown,这里你可以在shutdown之前await一下 另一种是你在另一个地方监听SIGINT关闭,这里需要你存储一下asyncWork的执行句柄,然后在接收到关闭信号后await一下
process.on(“beforeExit”)
来自酷炫的 CNodeMD
说错了, process.on(“sigint”)
来自酷炫的 CNodeMD