Ogu*_*oye 2 javascript asynchronous node.js async-await
我正在尝试为nodeJS项目创建数据库设置脚本。我有以下createTable查询PostgreSQL数据库的异步函数 。
问题是在执行所有操作后脚本不会退出。我尝试附加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();
Run Code Online (Sandbox Code Playgroud)
事件循环耗尽时,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();
Run Code Online (Sandbox Code Playgroud)
所有拒绝都应以promise catch()或try..catch。在这种情况下,如果不处理它们,将导致UnhandledPromiseRejectionWarning控制台输出,并且脚本永远不会退出。
| 归档时间: |
|
| 查看次数: |
2354 次 |
| 最近记录: |