2

重複の可能性:
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  + ';');
...

ありがとう、グカウフィ

4

1 に答える 1

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

これで、目的の結果のように見えます

于 2012-08-06T17:59:56.210 に答える