Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用';在一个命令中运行多个pg池查询函数;使可运行';_Javascript_Node.js_Postgresql_Asynchronous_Pool - Fatal编程技术网

Javascript 尝试使用';在一个命令中运行多个pg池查询函数;使可运行';

Javascript 尝试使用';在一个命令中运行多个pg池查询函数;使可运行';,javascript,node.js,postgresql,asynchronous,pool,Javascript,Node.js,Postgresql,Asynchronous,Pool,学习如何使用Postgres,并且难以以线性方式调用多个异步池函数 我想在Powershell上的一个命令中删除所有表,创建所有表,并为所有表设定种子。我正在为此使用npm模块“使可运行”。这些函数是独立运行的,但每次我想尝试新功能时,都要一次输入一个函数,这是一件痛苦的事情 我回顾了异步语法的工作原理,并且在过去成功地使用了它。我查阅了pool是如何工作的,但我只是得到了很多关于其语法的解释 我的三个函数基本上就是这种结构,并且使用相同的pool.query()调用: 这在Powershell

学习如何使用Postgres,并且难以以线性方式调用多个异步池函数

我想在Powershell上的一个命令中删除所有表,创建所有表,并为所有表设定种子。我正在为此使用npm模块“使可运行”。这些函数是独立运行的,但每次我想尝试新功能时,都要一次输入一个函数,这是一件痛苦的事情

我回顾了异步语法的工作原理,并且在过去成功地使用了它。我查阅了pool是如何工作的,但我只是得到了很多关于其语法的解释

我的三个函数基本上就是这种结构,并且使用相同的pool.query()调用:

这在Powershell中运行得很好,但当我尝试将这三种方法结合在一起时

const makeFresh = async function() {
    const stepOne = await dropTables();
    const stepTwo = await createTables();
    const stepThree = await seedTables();
}
一个被调用(或者可能他们都尝试并启动,因为他们一次没有运行一个?)似乎是随机的,因为shell的输出中每次的命令都可能不同:

--------make-runnable-output--------
undefined
------------------------------------
connected to db
connected to db
connected to db
Result {
  command: 'DROP',
  rowCount: null,
  oid: null,
  rows: [],
  fields: [],
  _parsers: [],
  RowCtor: null,
  rowAsArray: false,
  _getTypeParser: [Function: bound ] }
client removed

我相信这个问题有一个简单的答案,问这个问题我感到很难过,但我不想再浪费一个小时,因为我的头撞到了墙上。

今天解决了这个问题。由于每个函数都关闭pg池,因此后续调用无法执行其工作。使每个函数在默认情况下关闭池,以便可以继续单独调用它们,但如果传入truthy值,它们将允许池保持打开状态,以便其他函数可以使用它

我的新创建表示例如下所示:

const createTables = async (isKeepingPoolOpen = false) => {

    const taskTableText = 
        `CREATE TABLE IF NOT EXISTS
            acts(
                id UUID DEFAULT uuid_generate_v1 (),
                name VARCHAR(128) NOT NULL,
                length INTERVAL NOT NULL,
                percent_complete INT NOT NULL,
                start_stamp TIMESTAMPTZ NOT NULL,
                PRIMARY KEY (id)
            )
        `;

    return pool.query(taskTableText)
        .then((res) => {
            console.log(res);
            isKeepingPoolOpen === true ? '' : pool.end();
        })
        .catch((err) => {
            console.log(err);
            isKeepingPoolOpen === true ? '' : pool.end();
        });
}
const makeFresh = function() {
    const isKeepingPoolOpen = true;
    dropTables(isKeepingPoolOpen)
    .then(() => createTables(isKeepingPoolOpen))
    .then(() => seedTables(isKeepingPoolOpen))
    .then(() => {
        pool.end();
    })
    .catch((err) => {
        console.log("error: " + error);
        pool.end();
    });
}
我的新“全部调用”函数现在如下所示:

const createTables = async (isKeepingPoolOpen = false) => {

    const taskTableText = 
        `CREATE TABLE IF NOT EXISTS
            acts(
                id UUID DEFAULT uuid_generate_v1 (),
                name VARCHAR(128) NOT NULL,
                length INTERVAL NOT NULL,
                percent_complete INT NOT NULL,
                start_stamp TIMESTAMPTZ NOT NULL,
                PRIMARY KEY (id)
            )
        `;

    return pool.query(taskTableText)
        .then((res) => {
            console.log(res);
            isKeepingPoolOpen === true ? '' : pool.end();
        })
        .catch((err) => {
            console.log(err);
            isKeepingPoolOpen === true ? '' : pool.end();
        });
}
const makeFresh = function() {
    const isKeepingPoolOpen = true;
    dropTables(isKeepingPoolOpen)
    .then(() => createTables(isKeepingPoolOpen))
    .then(() => seedTables(isKeepingPoolOpen))
    .then(() => {
        pool.end();
    })
    .catch((err) => {
        console.log("error: " + error);
        pool.end();
    });
}

同时,用一种让他们等待轮到他们的方式来使用承诺。我对这个异步的东西很熟悉,所以如果我用错了或者不必要的话,请告诉我。