【发布时间】:2014-07-06 22:54:57
【问题描述】:
我是 nodejs 的新手,我正在尝试从我的 PG 服务器获取一些数据。我设法获取我的数据,但不是按照我预期的顺序。我可能没有正确使用它,有人可以帮忙吗?
这是一个代码示例:
var pg = require('pg');
var db = new pg.Client(conString);
var link = db.connect();
var data = {};
// -----
console.log(prefix+'Fetching categories');
db.query('SELECT DISTINCT category FROM cc WHERE category IS NOT NULL', function(err, data){
data.rows.forEach(function(row){
data[row.category] = {}; // initialise
});
console.log('1111111',data,'---------');
});
console.log('2222222',data,'---------');
for (var category in data)
{
console.log(prefix+'Listing values for on "'+category+'"');
var values = db.query('SELECT SUBSTRING(date::varchar, 1,7) AS month, sum(amount) FROM cc WHERE category = \''+category+'\' GROUP BY 1 ORDER BY 1', function(err, data){
console.log('Got values',data.rows);
});
}
// -----
console.log(prefix+'Ending connection to database');
// db.end();
// -----
console.log(prefix+'Ending transaction on server side');
response.end();
我得到222222 before 1111111 :/ 所以我的结果被发送为空然后它被填充:( 我该怎么办?
感谢您的宝贵时间!
【问题讨论】:
-
当然你在 1111111 之前得到了 222222。这就是异步在节点中的工作方式。您的第一个查询开始然后节点不等待查询完成,只是继续打印 222222。这是非阻塞的,这是节点的一个非常重要的特性。如果要在第一个查询完成后执行第二个查询,则需要将其放在第一个查询的回调中,其中 console.log('1111111',data,'---------');是。
标签: node.js postgresql