首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回node-postgres查询的结果

返回node-postgres查询的结果
EN

Stack Overflow用户
提问于 2019-10-06 14:15:09
回答 3查看 6.9K关注 0票数 3

我试图返回node-postgres查询的结果,并将其存储在一个变量中。我可以很好地管理console.log,但找不到一种返回结果的方法,因此它可以在query方法之外访问。我不知所措,我知道我一定遗漏了一些明显的东西(或多个明显的东西),因为如果不可能做到这一点,我就不明白node-postgres的意义,因为我所能做的就是将我的结果记录到控制台。

我已经尝试了下面的代码,以及一个使用promises的版本,两者都得到了相同的结果,“未定义”。else中的console.log可以很好地工作,但返回并不能让函数的其余部分访问结果。在下面的代码中,我返回的返回值是“未定义的”,console.log也是如此。

代码语言:javascript
复制
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);
EN

回答 3

Stack Overflow用户

发布于 2020-02-20 23:06:01

这就是您要查找的内容:

代码语言:javascript
复制
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;
  }
}

在前一个函数之外:

代码语言:javascript
复制
async function whateverFuncName () {
   var result = await selectFrom('amount','total_nonfarm_monthly_sa', `WHERE month='2019-08-31'`);
   console.log(result);
}

编辑:我没有运行这段代码,但主要概念非常简单。

票数 4
EN

Stack Overflow用户

发布于 2019-10-06 14:28:18

"query“方法是异步调用,您应该使用async/await或Promise。

具有异步/等待功能的

代码语言:javascript
复制
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();

编辑:我可以看到有一个回调选项,但我会使用异步/等待

票数 1
EN

Stack Overflow用户

发布于 2019-10-06 14:34:16

您需要使用回调:

代码语言:javascript
复制
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);   
});

或者承诺:

代码语言:javascript
复制
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);   
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58254717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档