gpt4 book ai didi

Javascript:异步函数后退出脚本

转载 作者:搜寻专家 更新时间:2023-11-01 00:27:49 26 4
gpt4 key购买 nike

我正在尝试为 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();

最佳答案

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

在这种情况下有数据库查询但数据库连接没有关闭,这就是原因。控制流也一团糟,没有结果链的 promise 。

应该是:

  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 控制台输出和永不退出的脚本。

关于Javascript:异步函数后退出脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52461119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com