node.js和postgresql的一个相当简单的用例让我困惑。
此代码执行的第一个查询的结果似乎会延迟并错误地包含在第二个查询的结果数组中。
预期产出:
running queries ---------------
[ { name: 'Company 0' } ]
[ { id: 0, company_id: 0 }, { id: 1, company_id: 0 } ]
常用输出:
running queries ---------------
[ { name: 'Company 0' } ]
[ { name: 'Company 0' },
{ id: 0, company_id: 0 },
{ id: 1, company_id: 0 } ]
偶尔我会得到正确的结果。在代码下方,包含一个“修复”,确保我始终得到正确的结果:
var pg = require('pg');
var connectionString = require('./dbconfig.js');
var doQuery = function(queryString) {
// Get a Postgres client from the connection pool
pg.connect(connectionString, function(err, client, done) {
results = [];
// results.push(queryString); // PART OF 'FIX'
var query = client.query(queryString);
// Stream results back one row at a time
query.on('row', function(row) {
results.push(row);
});
// After all data is returned, close connection and return results
query.on('end', function() {
client.end();
// results.splice(0, 1); // PART OF 'FIX'
console.log(results);
});
// Handle Errors
if(err) {
console.log(err);
}
});
};
var company_id = 0;
console.log('running queries ---------------');
doQuery('SELECT companies.name FROM companies WHERE companies.id = '+company_id+';');
doQuery('SELECT * FROM users WHERE users.company_id = ' + company_id + ';');
如果有人有兴趣尝试重现这一点(假设我不是一个愚蠢的编码错误),我很乐意提供剩下的代码。
答案 0 :(得分:-2)
JavaScript是一种糟糕的语言(请参阅我对解决方案的评论)。