如何在 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
代替,这样两个查询就可以同时进行,而不是让等待第一个先完成。
所以我不确定 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
代替,这样两个查询就可以同时进行,而不是让等待第一个先完成。