nodejs

2017-06-15 7 views
1

に変数としてpostgresのクエリの結果を取得し、私は次のコードは、コマンドライン上で私のクエリの結果を出力することを知っている:nodejs

query.on("row", function (row, result) { 
    result.addRow(row); 
}); 

query.on("end", function (result, callback) { 
    println(JSON.stringify(result)) 
}); 

しかし、私は次のように結果の値を使用したいですコードを変数として使用し、コマンドラインに出力するだけではありません。

更新:あなたの答えを事前に

query.on("row", function (row, result) { 
    result.addRow(row); 
}); 

query.on("end", function (result, callback) { 
    println(JSON.stringify(result)) 
}); 
//use the result here 

ありがとう:次のクエリの値を使用することであることは十分ではありません、私はそれが、クエリスコープ外になりたいです。

答えて

2

あなたは2つのオプションがあります:

  • あなたが基本的なドライバを引き続き使用する場合は、結果のコールバックを使用する必要があります、その後、巣、次のクエリで結果を使用するためのもの:

    connection.query(query1, values1, function(err1, result1) { 
        // check if(err1) first, then: 
        connection.query(query2, values2, function(err2, result2) { 
         // check if(err2) first, then: 
         connection.query(query3, values3, function(err3, result3) { 
          // check if(err3) first, then: 
          cb(result1, result2, result3);   
         }); 
        }); 
    }); 
    
  • 別のアプローチは、約束を使用することです(pg-promise)ときに、このようなことができますチェーンコール:

    db.query(query1, values2) 
        .then(data => { 
         return db.query(query2, values2); 
        }) 
        .then(data => { 
         return db.query(query3, values3); 
        }) 
        .catch(error => {}); 
    

この場合pg-promiseのための適切なアプローチは、メソッドtask経由ではあるが:

db.task(t => { 
    const result = {}; 
    return t.query(query1, values1) 
     .then(data => { 
      result.a = data; 
      return t.query(query2, values2); 
     }) 
     .then(data => { 
      result.b = data; 
      return t.query(query3, values3); 
     }); 
     .then(data => { 
      result.c = data; 
      return result; 
     }); 
}) 
    .than(data => { 
     // data = {a, b, c} 
    }) 
    .catch(error => {}); 

第2のアプローチは、自動的に一度に複数のクエリを実行するときに、あなたがES6とES7の近代的な構文にアクセスすることができます、あなたが行うことができますように:ES6については

:ES7 /バベルのために

db.task(function * (t) { 
    let a = yield t.query(query1, values1); 
    let b = yield t.query(query2, values2); 
    let c = yield t.query(query3, values3); 
    return {a, b, c}; 
}) 
    .than(data => { 
     // data = {a, b, c} 
    }) 
    .catch(error => {}); 

db.task(async t => { 
    let a = await t.query(query1, values1); 
    let b = await t.query(query2, values2); 
    let c = await t.query(query3, values3); 
    return {a, b, c}; 
}) 
    .than(data => { 
     // data = {a, b, c} 
    }) 
    .catch(error => {}); 
+0

これは私の質問には良い答えですが、質問は不正解でした。申し訳ありません。更新された質問を読んだり、もう一度私を助けてくれたら嬉しいです。 – Sebastian

+0

@Sebastianそこでは、私は答えを更新しました。 –