如何获得EXPRESSJS / MYSQL中的父母子女关系?

我有这样的桌子:

  • 没有
  • 字母

没有表格包含(1,2,3,4)

字母表中包含(苹果,球,猫,狗)

这是我的js文件:

var connection = require('../connection'); function Todo() { this.get = function(res) { connection.acquire(function(err, con) { con.query('select * from no', function(err, result) { for(var key in result) { var no = result[key].number; console.log(no); con.query('select * from alphabets', function(err, result2) { for(var key in result2) { var alph = result2[key].alphabets; console.log(no+"."+alph); } console.log('\n'); }); } con.release(); res.send(result); }); }); }; } module.exports = new Todo(); 

我需要有两个查询之间的父子关系没有表作为父母和字母作为孩子。

在命令提示符处我的预期输出:

  1.apple 1.ball 1.cat 1.dog 2.apple 2.ball 2.cat 2.dog 3.apple 3.ball 3.cat 3.dog 4.apple 4.ball 4.cat 4.dog 

输出我得到了:

  1 2 3 4 4.apple 4.ball 4.cat 4.dog 4.apple 4.ball 4.cat 4.dog 4.apple 4.ball 4.cat 4.dog 4.apple 4.ball 4.cat 4.dog 

我想知道为什么第一个查询asynchronous运行,并完成它的循环。 如何创build两个查询之间的关系,使查询同步运行,避免在字母表中重复没有表的最后一个值?

您可以使用SynJS同步callback函数。 我重构了一下你的代码,这里是一个工作版本:

 global.SynJS = global.SynJS || require('synjs'); var mysql = require('mysql'); var connection = mysql.createConnection({ database : 'tracker', user : 'tracker', password : 'tracker123' }); var myFunction1=function( mysql, connection ) { connection.connect(function(err) { SynJS.resume(_synjsContext); }); SynJS.wait(); var result; connection.query('select * from no', function(err, res) { result = res; SynJS.resume(_synjsContext); }); SynJS.wait(); for(var key in result) { var no = result[key].number; console.log(no); var result2=null; connection.query('select * from alphabets', function(err, res2) { result2 = res2; SynJS.resume(_synjsContext); }); SynJS.wait(); for(var key in result2) { var alph = result2[key].alphabets; console.log(no+"."+alph); } console.log('\n'); } }; SynJS.run(myFunction1,null, mysql, connection, function (ret) { console.log('done'); }); 
Interesting Posts