首页 > 解决方案 > 回调与异步回调

问题描述

我有以下代码,它在 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);
  }
};

标签: javascriptnode.js

解决方案


async函数将立即开始执行,直到它们到达第一await条语句或结束时。

因此,假设您只是调用console.logand gracefulShutdown,则两者都以相同的顺序执行。

两者在如何处理错误、返回什么方面会有所不同,但我认为这对这种情况没有影响。

我建议您在每种情况下都进行一些错误处理,gracefulShutdown如果它引发错误


推荐阅读