Node JS - DB异步调用

Node JS - DB call async?

本文关键字:异步 调用 DB JS Node      更新时间:2023-09-26

我是node js的新手,我使用以下链接连接node js与postgres db:

如何通过Node.js连接Postgres

下面的代码在节点控制台运行时从DB (Postgres)获取一些结果

var query_str = "SELECT name FROM city" ;
var pg = require('pg');
var conString = "postgres://postgres:postgres@localhost:5432/cfg";
var client = new pg.Client(conString);
client.connect();
var query = client.query(query_str);
console.log(query);

但是当我像这样将上面的代码放入函数中并进行函数调用

 function getname()
 {
   var query_str = "SELECT name FROM city" ;
   var pg = require('pg');
   var conString = "postgres://postgres:postgres@localhost:5432/cfg";
   var client = new pg.Client(conString);
   client.connect();
   var query = client.query(query_str);
   console.log(query);
   return query;
 }

返回一个空对象。是因为代码是异步的吗?如果是这样,我该如何解决这个问题呢?

谁能帮我解决这个问题?或者如何继续下去。谢谢。

client.query是异步的,你的函数应该期望一个callback函数或者它应该返回一个Promise

function getname(cb) {
  var query_str = "SELECT name FROM city";
  var pg = require('pg');
  var conString = "postgres://postgres:postgres@localhost:5432/cfg";
  var client = new pg.Client(conString);
  client.connect(function(err) {
    if (err) cb(err);
    client.query(query_str, function(err, result) {
      if (err) cb(err);
      cb(null, result);
      client.end(function(err) {
        if (err) cb(err);
      });
    });
  });
}
getname(function(error, data) {
  if (error) {
    console.log(error);
  } else {
    console.log(data);
  }
});