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
是异步的,你的函数应该期待一个 callback
function 或者它应该返回一个 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 - 数据库调用异步? [复制]的主要内容,如果未能解决你的问题,请参考以下文章