我有这样的表:
没有表包含(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
我想知道为什么第一个查询以异步方式运行并完成循环。如何在两个查询之间创建关系,以便查询同步运行,避免在字母表表中重复无表的最后一个值?
答案 0 :(得分:1)
您可以使用SynJS同步运行带回调的函数。我稍微重构了一下你的代码,这是一个有效的版本:
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');
});