我有下面的代码,在node.js应用程序中实现SIGINT和SIGTERM信号处理。
// quit on ctrl+c when running docker in terminal
process.on('SIGINT', async () => {
console.info('Got SIGINT (aka ctrl+c in docker). Graceful shutdown', new Date().toISOString());
await gracefulShutdown(server);
});
// quit properly on docker stop
process.on('SIGTERM', async () => {
console.log('Got SIGTERM (docker container stop).Graceful shutdown', new Date().toISOString());
await gracefulShutdown(server);
});在这两种情况下,我都在传递一个关闭应用程序的async回调函数。
如果选择不在回调中执行await,则如下所示。
// quit properly on docker stop
process.on('SIGTERM', () => {
console.log('Got SIGTERM (docker container stop).Graceful shutdown', new Date().toISOString());
gracefulShutdown(server);
});这个普通回调和上面的异步回调在执行顺序或执行上有什么不同?
两者是不同还是相同?
这是gracefulShutdown()处理程序
const { sequelize } = require('../models');
module.exports = async (server) => {
try {
await sequelize.close();
console.info('Closed database connection!');
await server.close();
process.exit();
} catch (error) {
console.info(error.message);
process.exit(1);
}
};发布于 2021-01-05 13:08:03
async函数将立即开始执行,直到命中第一个await语句或结束时为止。
因此,如果您只是调用console.log和gracefulShutdown,那么这两个函数的执行顺序都是相同的。
两者在如何处理错误、返回什么方面会有所不同,但我不认为这对这种情况有什么影响。
我建议在每种情况下,如果gracefulShutdown会抛出错误,就对它进行一些错误处理
https://stackoverflow.com/questions/65573523
复制相似问题