我使用nodejs 0.10.12和node-postgre 2.2.0
我创建了一个包含两个不同查询的函数,它们可以执行并返回结果。
执行查询后,我想从两个查询中收集所有结果,并通过websockets将它们发送到客户端。
我无法将查询中的值传递给websockets。在客户端,当我提醒传入的数据时,我得到“未经分类”。我虽然将变量设置为全局变量,但仍然没有
有什么想法吗?
提前致谢
这是代码
//set all vars as globals, at the start of the doc
var mnm=[]; var name;
//inside the function
//query 1
client.connect();
var query = client.query('SELECT pins.p_name FROM pins WHERE pins.p_id ='+eoid)
query.on("row", function (row, result) {result.addRow(row);});
query.on("end", function (result) {
for (var i=0; i<result.rows.length; i++)
{name = result.rows[0].p_name;}
});
//query 2
var query2 = client.query('SELECT m_name FROM multi WHERE m_pins ='+eoid)
query2.on("row", function (row, result) {result.addRow(row);});
query2.on("end", function (result) {
for (var i=0; i<result.rows.length; i++)
{mnm.push(result.rows[i].m_name);}
client.end();
});
//so , now gather "name" from the first query and "mnm" from the second and send them to client
connection.send(JSON.stringify({name:name , mnm:mnm}));
EDIT 现在我意识到,如果我第一次执行此代码,客户端会发出新的警报。对于第二个,警告我选择的上一个对象的数据。如果我点击object1我会得到解开。如果我单击对象2,我会得到object1。请建议
答案 0 :(得分:0)
基于Mathieu'OtaK'Amiot简单但有效的想法,我在第一个查询的“结束”事件中进行了第二次查询。
所以这是代码
client.connect();
var query = client.query('SELECT pins.p_name FROM pins WHERE pins.p_id ='+eoid)
query.on("row", function (row, result) {result.addRow(row);});
query.on("end", function (result) {
for (var i=0; i<result.rows.length; i++)
{name = result.rows[0].p_name;}
var query2 = client.query('SELECT m_name FROM multi WHERE m_pins ='+eoid)
query2.on("row", function (row, result) {result.addRow(row);});
query2.on("end", function (result) {
for (var i=0; i<result.rows.length; i++)
{mnm.push(result.rows[i].m_name);}
connection.send(JSON.stringify({name:name , mnm:mnm}));
client.end();
});//inner query "on end"
}); //outter query "on end"
感谢Mathieu的惊人想法。现在工作正常。