首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript:异步函数后退出脚本

Javascript:异步函数后退出脚本
EN

Stack Overflow用户
提问于 2018-09-23 05:40:35
回答 1查看 10.9K关注 0票数 12

我正在尝试为一个nodeJS项目创建一个数据库安装脚本。我有以下查询PostgreSQL数据库的异步函数createTable

问题是,在执行完所有操作后,脚本不会退出。我曾尝试将process.exit(0)附加到文件的末尾,但这只是过早地终止了脚本(我认为它是在异步操作运行时执行的)。

如何在操作完成后正确退出脚本?

const dbInit = () => {
  const createTable = async (creationQuery, tableName) => {
    try {
      const created = await client.query(creationQuery);
      if (created) logger(`'${tableName}' table created successfully`);
    } catch (err) {
      logger(err.message);
    }
  };

  createTable(Schemas.userModel, 'Users');
  createTable(Schemas.orderModel, 'Orders');
};
dbInit();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-23 06:00:35

当事件循环运行枯竭时,Node.js退出。如果脚本在async函数结束后没有退出,这意味着有一些东西阻止了它的完成。

在这种情况下,有数据库查询,但数据库连接没有关闭,这是原因。此外,控制流也是混乱的,没有结果承诺链。

它应该是:

  const createTable = async (creationQuery, tableName) => {
    try {
      const created = await client.query(creationQuery);
      if (created) logger(`'${tableName}' table created successfully`);
    } catch (err) {
      logger(err.message);
    }
  };

const dbInit = async () => {
  try {
    await createTable(Schemas.userModel, 'Users');
    await createTable(Schemas.orderModel, 'Orders');
    process.exit(0);
    // or close database connection
  } catch (err) {
    process.exit(1);
  }
};
dbInit();

所有拒绝都应该使用promise catch()try..catch来处理。在这种情况下不处理它们可能会导致UnhandledPromiseRejectionWarning控制台输出和脚本永远不会退出。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52461119

复制
相关文章

相似问题

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