如何在node.js中执行同步SQL查询

可能重复:
使用Node.js进行同步数据库查询

通常,我们执行一个SQL查询并得到一个callback的结果。 喜欢这个:

sqlExec('SELECT COL FROM TBL;', function (err, results, fields) { doSomething(results); }); 

但是如果我们需要用SQL的结果做更复杂的工作,代码会更加丑陋,就像这样:

 var tmp = ''; sqlExec('SELECT COL1 FROM TBL1;', function (err, results, fields) { tmp = doSomething(results); sqlExec('SELECT COL2 FROM TBL2 WHERE CONDITION2 = ' + tmp + ';', function (err, results, fields) { tmp = doSomething2(results); sqlExec('SELECT COL3 FROM TBL3 WHERE CONDITION3 = ' + tmp + ';', function (err, results, fields) { .... }); }); }); 

我们有一个想法让它同步? 喜欢这个:

 var tmp = '', result = ''; result = sqlExec('SELECT COL1 FROM TBL1;'); tmp = doSomething(result); sqlExec('SELECT COL2 FROM TBL2 WHERE CONDITION2 = ' + tmp + ';'); tmp = doSomething(result); sqlExec('SELECT COL3 FROM TBL3 WHERE CONDITION3 = ' + tmp + ';'); ... 

谢谢,Gaufy

一个很好的模式在这里描述http://stella.laurenzo.org/2011/03/bulletproof-node-js-coding/第2段,你的例子是这样的:

 sqlExec('SELECT COL1 FROM TBL1;', function (err, results, fields) { var tmp = doSomething(results); nextStep( tmp ); } function nextStep( tmp ) { sqlExec('SELECT COL2 FROM TBL2 WHERE CONDITION2 = ' + tmp + ';', function (err, results, fields) { var othertmp = doSomething2(results); nextNextStep( othertmp ); } } function nextNextStep( tmp ) { sqlExec('SELECT COL3 FROM TBL3 WHERE CONDITION3 = ' + tmp + ';', function (err, results, fields) { .... } 

现在它几乎看起来像你想要的结果