首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待具有内部回调的同步函数

等待具有内部回调的同步函数
EN

Stack Overflow用户
提问于 2020-06-17 16:23:30
回答 1查看 316关注 0票数 1

我有一些同步函数,其中有些不是我自己的代码。这些函数在完成后接受并执行回调函数。

我需要等待这些回调完成,然后退出应用程序。我怎么才能强制执行呢?

代码语言:javascript
复制
const serverGracefulShutdown = () => {

  logger.info('Signal received: Gracefully killing application');

  httpServer.close(() => {
    logger.info('Apollo server closed');
  });

  redis.quit(() => {
    logger.info('Redis client closed');
  });

  stopKafkaConsumer(() => {
    logger.info('Kafka consumer closed');
  });

  logger.info('Application closed');
  process.exit(0);
};

process.on('SIGINT', serverGracefulShutdown);
process.on('SIGTERM', serverGracefulShutdown);

在上面的代码中,我希望确保应用程序的优雅关闭。

所有正在运行的东西都停止了,然后我可以调用process.exit(0)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-17 16:27:34

你应该能够履行诺言:

代码语言:javascript
复制
const serverGracefulShutdown = () => {

  logger.info('Signal received: Gracefully killing application');

  const promises = [

    new Promise((resolve, reject) => httpServer.close(() => {
      // do you get an optional error param inside this callback?
      // if yes, then "if (error) reject(error) else resolve()"
      // (or any other way to mark this operation as failed)
      logger.info('Apollo server closed');
      resolve();
    })),

    new Promise((resolve /* + reject? */) => redis.close(() => {
      logger.info('Redis client closed');
      resolve();
    })),

    new Promise((resolve /* + reject? */) => stopKafkaConsumer(() => {
      logger.info('Kafka consumer closed');
      resolve();
    }))

  ];

  return Promise.all(promises).then(() => {
    logger.info('Application closed');
    process.exit(0);
  }).catch((error) => {
    // what's your plan if at least one failed?
  });

};

process.on('SIGINT', serverGracefulShutdown);
process.on('SIGTERM', serverGracefulShutdown);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62433724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档