2016-03-30 35 views
0

我有一些问题管理异步功能。这里是我的代码:用postgresql同步函数node.js?

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); 
    }); 

在执行queryInterest之前,users数组推送用户,所以用户的兴趣永远不会被添加。我该如何解决这个问题?

谢谢你这么多

+0

为什么你不能移动'users.push(用户);''里面queryInterest.on'。这将解决您的问题。 –

+0

在这种情况下,代码的返回是一个empy数组 –

+0

是的,因为您的结束事件在'query'对象上。所以只要查询完成,它就返回对象。你可以考虑使用'async'库。 –

回答

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

您修改的出口是:使用'node ./bin启动子进程/ www' finish GET/api/v1/tander 200 28.330 ms - 2 user added user added 因此,代码的返回现在是empy –