0

我有一个名为的脚本scheduler(),它在 Postgres 数据库上运行一些查询,然后完成。我遇到了脚本挂在终端中并且之后不退出的问题。

这是我的代码:

调度程序.js

const {pool} = require("./db");
const scheduler = async function() {
    try {
        await auctionCheck();
        return pool.end().then(() => {
            console.log('Pool\'s closed');
            return;
        })

    } catch (e) {
        console.error(e)
        return;
    }

}
return scheduler();

数据库.js

const {Pool} = require("pg");
const pool = new Pool({
    connectionString: process.env.DATABASE_URL,
});

pool.on('error', (err, client) => {
    console.error('Unexpected error on idle client', err)
    process.exit(-1)
})

pool.connect();

module.exports = {pool};

当我没有pool.end()来电时,我的脚本没有退出,但它也没有随着end()来电而退出。永远不会打印“池已关闭”日志。node-pg 文档说我应该这样做来关闭连接(我假设我的脚本没有完成的原因是由于打开的数据库连接。)我想基本上定期运行一些函数然后让脚本完成,但是目前它只是保持直播。我究竟做错了什么?

4

1 回答 1

1

看来原因是在db.js我有pool.connect()。因此,当我这样做时pool.end(),它无法关闭连接,因为它没有池中的所有客户端 - 一个已经创建db.js但从未释放。pool.connect()当我在进程中删除时db.js,它应该退出。

于 2022-02-17T12:41:20.137 回答