2012-08-06 30 views
2
同步SQL查詢

可能重複:
Synchronous database queries with Node.js如何做的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 + ';'); 
... 

感謝, Gcaufy

+1

也許你應該看看Async.js https://github.com/caolan/async/ – Roest 2012-08-06 17:18:39

+0

它看起來像e你所面對的主要問題是將異步請求鏈接在一起,而不需要所有的嵌套,對嗎? – jcolebrand 2012-08-06 17:49:31

+0

是的,如果我們可以在不嵌套的情況下完成這些請求,那應該會更好。 – Gcaufy 2012-08-07 05:22:46

回答

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) { 
     .... 
} 

現在看起來幾乎像你想要的結果

+0

即使使用這些函數,您應該爲其他函數執行回調 – jcolebrand 2012-08-06 23:22:53