如何在 Node-postgres 中使用多个查询?

How can I use more than one query in Node-postgres?

所以我不确定 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 方法 - 您对 Promise 所能做的就是调用 .then.catch 在上面(或 .finally,有时)。

如果您想在旧查询完成后进行新查询,请在 .then:

中调用 client.query
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 代替,这样两个查询就可以同时进行,而不是让等待第一个先完成。