Node JS - 数据库调用异步? [复制]

Posted

技术标签:

【中文标题】Node JS - 数据库调用异步? [复制]【英文标题】:Node JS - DB call async? [duplicate] 【发布时间】:2017-02-03 15:09:26 【问题描述】:

我对 node js 很陌生,我使用以下链接将 node js 与 postgres db 连接起来:

How to make connection to Postgres via Node.js

以下代码在节点控制台中运行时从数据库(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;
 

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

谁能帮我解决这个问题。或者如何进一步进行。谢谢。

【问题讨论】:

【参考方案1】:

client.query 是异步的,你的函数应该期待一个 callbackfunction 或者它应该返回一个 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);
  
);

【讨论】:

以上是关于Node JS - 数据库调用异步? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

带有 Express 异步 API 调用的 Node.JS

Node.js 异步编程与连接mysql数据库

Node.JS:如何将变量传递给异步回调? [复制]

Node.js 同步循环或迭代异步语句

node.js中的forEach是同步还是异步

Node.Js 中的异步问题 - 如何执行一系列操作? [复制]