问题描述
因此,我不确定node-pg的工作方式,但我一直在尝试通过四处浏览,尝试和阅读文档来使其工作。我想要实现的是能够在不同的时间发送多个查询,但是如果我敢于编码第二个,则在我发送第一个查询之后它总是会引发错误。这个问题已经在网上多次提出,但是我看不到任何帮助答案。我可以在必要时使用池化(也有问题)。
现在可以正常工作:(在heroku上,因此我必须使用process.env.DATABASE_URL)
match lhs {
TypeExpr::Ident((lhs_name,lhs_span)) if lhs_name == "float" => {
// Do the things
}
_ => {}
}
我要做什么:
const { Client } = require('pg');
const client = new Client({
connectionString: process.env.DATABASE_URL,ssl: {
rejectUnauthorized: false
}
});
client.connect()
client
.query('SELECT * FROM test WHERE....')
.then(results => {
console.log(results);
}
.catch(err => {
console.log(err.stack)
})
解决方法
当您.query
时,将返回一个Promise,并且Promise没有.query
方法-您只能使用.then
或.catch
调用Promise (有时是.finally
)。
如果您想在旧版本完成后再进行新查询,请在client.query
内调用.then
:
client
.query('SELECT * FROM test1 WHERE....')
.then(results => {
console.log("FIRST RESULTS: " + results);
})
.then(() => client.query('SELECT * FROM test2 WHERE....'))
.then(results => {
console.log("SECOND RESULTS: " + results);
})
.catch(err => {
// better to handle errors at the end,probably
console.log(err.stack)
})
如果第二个查询取决于第一个查询的结果,请考虑改用async
函数,以使代码更平整且更具可读性。
如果第二个查询不依赖于第一个查询,请考虑改用Promise.all
,以便可以立即进行两个查询,而不必等待第一个查询首先完成。