因此,我不确定node-pg的工作方式,但我一直在尝试通过四处浏览,尝试和阅读文档来使其工作。我想要实现的是能够在不同的时间发送多个查询,但是如果我敢于编码第二个,则在我发送第一个查询之后它总是会引发错误。这个问题已经在网上多次提出,但是我看不到任何帮助答案。我可以在必要时使用池化(也有问题)。
现在有效:(在heroku上,因此我必须使用process.env.DATABASE_URL)
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)
})
我正在尝试做的是:
const { Client } = require('pg');
const client = new Client({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
client.connect()
client
.query('SELECT * FROM test1 WHERE....')
.then(results => {
console.log("FIRST RESULTS: "results);
}
.catch(err => {
console.log(err.stack)
})
.query('SELECT * FROM test2 WHERE....')
.then(results => {
console.log("SECOND RESULTS: "results);
}
.catch(err => {
console.log(err.stack)
})
当您.query
返回Promise时,Promise中没有.query
方法-您只能使用call.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
改用,这样就可以立即进行两个查询,而不必等待第一个查询先完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句