我正在尝试为一个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();
发布于 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
控制台输出和脚本永远不会退出。
https://stackoverflow.com/questions/52461119
复制相似问题