2016-03-30 7 views
0

Ich habe einige Probleme mit der Verwaltung der Async-Funktionen. Hier ist mein Code:Sync-Funktionen node.js mit postgresql?

var query = client.query("select * from usuario"); 

    query.on('row', function(user) { 
    var queryInterest = client.query("select interes.nombre from interes inner join relacioniu on relacioniu.idinteres=interes.id where relacioniu.idusuario = '"+user.id+"'"); 
    queryInterest.on('row',function(row) { 
      user.interest = row; 
      console.log("user added"); 
     }); 
    users.push(user); 
    }); 
// After all data is returned, close connection and return results 
    query.on('end', function() { 
     done(); 
     console.log("finish"); 
     return res.json(users); 
    }); 

Der Benutzer Array schieben einen Benutzer vor der Ausführung von queryInterest, so die Interessen des Benutzers nie gegeben. Wie kann ich das lösen?

Vielen Dank

+0

, warum Sie nicht 'users.push (Benutzer) bewegen;' 'innen queryInterest.on'. Das wird dein Problem lösen. –

+0

In diesem Fall ist die Rückgabe des Codes ein Empy-Array –

+0

Ja, weil Ihr Endereignis auf "Abfrage" -Objekt ist. Sobald die Abfrage abgeschlossen ist, wird das Objekt zurückgegeben. Sie können die Async-Bibliothek verwenden. –

Antwort

1
var query = client.query("select * from usuario"); 

query.on('row', function(user) { 
var queryInterest = client.query("select interes.nombre from interes inner join relacioniu on relacioniu.idinteres=interes.id where relacioniu.idusuario = '"+user.id+"'"); 
queryInterest.on('row',function(row) { 
     user.interest = row; 
     users.push(user); // Moved it here; this is async, too. 
    }); 
}); 
+0

der Exit mit Ihrer Änderung ist: Child-Prozess mit 'Knoten ./bin starten/www ' Ende GET/api/v1/tander 200 28,330 ms - 2 Benutzer hinzugefügt Benutzer hinzugefügt So ist die Rückkehr des Codes jetzt empy –