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

问题描述

因此,我不确定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,以便可以立即进行两个查询,而不必等待第一个查询首先完成。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...