2017-01-12 2 views
0

私はノードJSを使用して書いているアプリケーションがあり、ネストされたコードの最適なフォーマットが何か不思議でした。例:ネストされたノードのベストフォーマットJS/Javascript

var express = require("express"); 
var app = express(); 
var pg = require('pg'); 
var client = new pg.Client(); 
var config1 = { 
    REMOVED 
}; 
var pool1 = new pg.Pool(config1); 
var config2 = { 
    REMOVED 
}; 
var pool2 = new pg.Pool(config2); 
app.get('/:id', function (req, res) { 
    pool1.connect(function(err, client1, done) { 
    pool2.connect(function(err, client2, done) { 
     client1.query("FIRST QUERY", [], function(err, result) { 
     client1.query("SECOND QUERY", [], function(err, result) { 
      client2.query("THIRD QUERY", [], function(err, result) { 


      }); 
     }); 
     }); 
    }); 
    }); 
}); 

各クエリは前のクエリの結果に依存し、この順序で実行する必要があります。

まだ別の2/3クエリがあります。コード例はこれをフォーマットする最良の方法ですか?それとももっと良い方法がありますか?

おかげで、

+1

[Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)は、この目的のために作られたものです。 –

+0

これには[pg-promise](https://github.com/vitaly-t/pg-promise)があります。 –

答えて

0

pg-promiseを使用している場合これは非常に簡単です:

var pgp = require('pg-promise')(/*initialization options*/); 
var db = pgp(config); // config is a string or object 

db.task(t => { 
    return t.query('FIRST QUERY', [params]) 
     .then(data => { 
      return t.query('SECOND QUERY', [params]); 
     }) 
     .then(data => { 
      return t.query('THIRD QUERY', [params]); 
     }) 
}) 
    .then(data => { 
     // SUCCESS 
    }) 
    .catch(error => { 
     // FAILED 
    }); 

そして、あなたは、トランザクションを使用する必要がある場合、その後、あなたは、単にtxと方法taskを交換してください。

関連する問題