Javascript 尝试使用';在一个命令中运行多个pg池查询函数;使可运行';
学习如何使用Postgres,并且难以以线性方式调用多个异步池函数 我想在Powershell上的一个命令中删除所有表,创建所有表,并为所有表设定种子。我正在为此使用npm模块“使可运行”。这些函数是独立运行的,但每次我想尝试新功能时,都要一次输入一个函数,这是一件痛苦的事情 我回顾了异步语法的工作原理,并且在过去成功地使用了它。我查阅了pool是如何工作的,但我只是得到了很多关于其语法的解释 我的三个函数基本上就是这种结构,并且使用相同的pool.query()调用: 这在Powershell中运行得很好,但当我尝试将这三种方法结合在一起时Javascript 尝试使用';在一个命令中运行多个pg池查询函数;使可运行';,javascript,node.js,postgresql,asynchronous,pool,Javascript,Node.js,Postgresql,Asynchronous,Pool,学习如何使用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();
});
}
同时,用一种让他们等待轮到他们的方式来使用承诺。我对这个异步的东西很熟悉,所以如果我用错了或者不必要的话,请告诉我。