Node.js / node-postgres lib / PostgreDB を使用して RESTful サービスを実装する際に 2 つの問題があり、どちらも JS の非同期性が原因です。
A) client.query(query, callback)呼び出しで追加の引数をコールバックに渡す必要があります
私はクエリのコールバック内にいて、DB から最近フェッチされた行の配列を調べており、それらのそれぞれに対して後続のクエリを起動したいと考えています。
var query = client.query('SELECT * FROM event', queryAllEventsHandler);
function queryAllEventsHandler(err, result){
allEvents = result.rows;
/* allEvents is an JSON array with the following format
[ {"id_event":1, "name":"name of the event"},
{"id_event":1, "name":"name of the event"}
]
*/
for(var i = 0; i<allEvents.length; i++){
client.query('SELECT * FROM days where id_event = $1',[allEvents[i].id_event], function( err, result){
//I want to have a reference to variable i
}
}
上記の例では、次のようなことをしたいと考えています。
client.query('SELECT * FROM days where id_event = $1',[allEvents[i].id_event], function( AN_EXTRA_ARG, err, result)
AN_EXTRA_ARG がコールバック関数の追加の引数またはクロージャーである場合...どうすればこれを達成できますか? of iでクロージャを作成し、それをコールバックの引数として渡す必要がありますか? どのように ?:|
B) クエリの「同期」
さまざまなクエリを起動し、それらすべてからカスタム JSON を作成する必要があります。すべてのクエリとそのコールバックは非同期 (誰も待っていない) であるため、それを「飼いならす」方法を探していました。他のものの中で、最初に思いついた解決策を見つけましたが、少し「悪い/お粗末」に見えました。 ": @jslattsがNode.js を使用した同期データベース クエリで示唆しているように、クエリ カウントを維持することは実際に進むべき道です。
ホープ・アイ