【问题标题】:How to do a sync SQL query in node.js [duplicate]如何在 node.js 中进行同步 SQL 查询 [重复]
【发布时间】:2012-08-07 01:59:56
【问题描述】:

可能重复:
Synchronous database queries with Node.js

通常,我们执行 SQL 查询并在回调中获取结果。像这样:

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  + ';');
...

谢谢, 高考

【问题讨论】:

  • 也许你应该看看 Async.js github.com/caolan/async
  • 看起来您正在努力解决的主要问题是将异步请求链接起来,以便在没有所有嵌套的情况下更易于管理,对吧?
  • 是的,如果我们可以在没有嵌套的情况下完成这些请求,那应该会更好。

标签: javascript mysql node.js


【解决方案1】:

这里描述了一个很好的模式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) {
        ....
 }

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

【讨论】:

  • 即使有这些函数,你也应该为其他函数做回调
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 2019-03-06
  • 2017-06-06
  • 2020-07-08
  • 1970-01-01
相关资源
最近更新 更多