我试图返回node-postgres查询的结果,并将其存储在一个变量中。我可以很好地管理console.log,但找不到一种返回结果的方法,因此它可以在query方法之外访问。我不知所措,我知道我一定遗漏了一些明显的东西(或多个明显的东西),因为如果不可能做到这一点,我就不明白node-postgres的意义,因为我所能做的就是将我的结果记录到控制台。
我已经尝试了下面的代码,以及一个使用promises的版本,两者都得到了相同的结果,“未定义”。else中的console.log可以很好地工作,但返回并不能让函数的其余部分访问结果。在下面的代码中,我返回的返回值是“未定义的”,console.log也是如此。
var selectFrom = function(data, table, condition) {
var queryResult;
pool.query(`SELECT ${data} FROM ${table} ${condition}`, function(err, result) {
if(err) { console.log(err); }
else { queryResult = result.rows[0][data]; }
})
pool.end();
return queryResult;
}
var result = selectFrom('amount','total_nonfarm_monthly_sa', `WHERE month='2019-08-31'`);
console.log(result);发布于 2020-02-20 23:06:01
这就是您要查找的内容:
async function selectFrom(data, table, condition) {
try {
const res = await pool.query(
`SELECT ${data} FROM ${table} ${condition}`
);
return res.rows[0][data];
} catch (err) {
return err.stack;
}
}在前一个函数之外:
async function whateverFuncName () {
var result = await selectFrom('amount','total_nonfarm_monthly_sa', `WHERE month='2019-08-31'`);
console.log(result);
}编辑:我没有运行这段代码,但主要概念非常简单。
发布于 2019-10-06 14:28:18
"query“方法是异步调用,您应该使用async/await或Promise。
具有异步/等待功能的:
await client.connect()
const res = await client.query("SELECT amount FROM total_nonfarm_monthly_sa WHERE month='2019-08-31'");
console.log(res.rows[0]);
await client.end();编辑:我可以看到有一个回调选项,但我会使用异步/等待
发布于 2019-10-06 14:34:16
您需要使用回调:
var selectFrom = function(data, table, condition, callback) {
pool.query(`SELECT ${data} FROM ${table} ${condition}`, function(err, result) {
if(err)
return callback(err);
callback(null, result.rows[0][data]);
})
pool.end();
}
selectFrom('amount','total_nonfarm_monthly_sa', `WHERE month='2019-08-31'`, function(err, result){
console.log(err, result);
});或者承诺:
var selectFrom = function(data, table, condition) {
return new Promise(function(resolve, reject){
pool.query(`SELECT ${data} FROM ${table} ${condition}`, function(err, result) {
if(err)
return reject(err);
resolve(result.rows[0][data]);
})
pool.end();
});
}
selectFrom('amount','total_nonfarm_monthly_sa', `WHERE month='2019-08-31'`)
.then(function(result){
console.log(result);
}).catch(function(err){
console.log(err);
});https://stackoverflow.com/questions/58254717
复制相似问题