pg client.query() 不等待 await
pg client.query() does not wait at the await
我不明白为什么 pg
客户端请求前面的 await
似乎不起作用,因为它在 client.query()
中的代码之前运行后的代码功能。
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
const client = new Client({
connectionString:connectionString
})
client.connect()
database_func()
async function database_func() {
await client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
console.log('res')
return;
})
client.end()
console.log('after res')
}
我希望上面的 return 这个:
=> res
=> after res
取而代之 returns:
=> after res
=> res
尝试
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
const client = new Client({
connectionString:connectionString
})
client.connect()
database_func();
function database_func() {
client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
console.log('res')
client.end()
console.log('after res')
return;
})
}
使用承诺:
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
database_func().then(() => console.log('done'))
function async database_func() {
const client = new Client({
connectionString:connectionString
});
client.connect()
await query_func(client, `SELECT t FROM es ORDER BY t DESC LIMIT 1;`);
await query_func(client, `SELECT t FROM es ORDER BY t LIMIT 1;`);
client.end()
}
function query_func(client, query) {
return new Promise((resolve, reject) => {
client.query(query, (err,res) => {
if(err) reject(err);
resolve(res);
}
});
}
您似乎正在尝试同时进行回调和 async/await。
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
const client = new Client({
connectionString:connectionString
})
client.connect()
database_func()
async function database_func() {
// You should be doing callbacks OR async/await whenever you call a query,
// You're doing both at the same time
client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
console.log('res')
return;
})
// OR
let res;
try {
res = await client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`);
} catch (err) {
console.error(err);
}
console.log(res);
client.end();
console.log('after res')
}
我不明白为什么 pg
客户端请求前面的 await
似乎不起作用,因为它在 client.query()
中的代码之前运行后的代码功能。
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
const client = new Client({
connectionString:connectionString
})
client.connect()
database_func()
async function database_func() {
await client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
console.log('res')
return;
})
client.end()
console.log('after res')
}
我希望上面的 return 这个:
=> res
=> after res
取而代之 returns:
=> after res
=> res
尝试
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
const client = new Client({
connectionString:connectionString
})
client.connect()
database_func();
function database_func() {
client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
console.log('res')
client.end()
console.log('after res')
return;
})
}
使用承诺:
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
database_func().then(() => console.log('done'))
function async database_func() {
const client = new Client({
connectionString:connectionString
});
client.connect()
await query_func(client, `SELECT t FROM es ORDER BY t DESC LIMIT 1;`);
await query_func(client, `SELECT t FROM es ORDER BY t LIMIT 1;`);
client.end()
}
function query_func(client, query) {
return new Promise((resolve, reject) => {
client.query(query, (err,res) => {
if(err) reject(err);
resolve(res);
}
});
}
您似乎正在尝试同时进行回调和 async/await。
const {Pool, Client} = require('pg')
const connectionString = 'postgressql://user@localhost:5432/database'
const client = new Client({
connectionString:connectionString
})
client.connect()
database_func()
async function database_func() {
// You should be doing callbacks OR async/await whenever you call a query,
// You're doing both at the same time
client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`, (err,res) => {
console.log('res')
return;
})
// OR
let res;
try {
res = await client.query(`SELECT t FROM es ORDER BY t DESC LIMIT 1;`);
} catch (err) {
console.error(err);
}
console.log(res);
client.end();
console.log('after res')
}