我在节点中使用postgresql模块'pg'。我想从数据库返回一行时做一些处理,但我不知道如何将值返回给调用函数。从事件发射器回调中返回值
var caller = function(){
var query = client.query(qString);
query.on('row', function(row){
if (row.foo == bar) {
return true;
} else {
return false;
}
}
};
当我打电话:
var boo = caller();
我想嘘等于回调返回的布尔。
我试图声明一个变量初始化,然后将返回的布尔值,
var caller = function(){
var fido;
var query = client.query(qString);
query.on('row', function(row){
if (row.foo == bar) {
fido = true;
} else {
fido = false;
}
}
return fido;
};
但功能没有等到“PG”返回一行。这会导致返回的变量未定义返回。我想我需要同步调用的一部分,所以变量的分配发生在函数返回之前,但我不知道如何做到这一点的正常功能。
编辑:
足够的伪代码。我对Node很陌生,并试图在提问时做得更好。这是一个我正在使用的类的应用程序。我用python编写了大部分的web.py文件,并且由于与angular.js框架的冲突以及在node.js中重写,我没有太多经验用。我遇到的问题是验证用户。这是被调用的模块。
var postAuth = function(params, callback){
var user = params['username'];
var pass = params['password'];
var result;
util['dispatch']['auth'](user, function(blah){
if (pass == blah) {
result = true;
} else {
result = false;
}
});
console.log(result);
return callback(200, "OK", {}, result);
}
,并从数据库获取密码,用户名的功能:
var auth = function(user, callback) {
client.connect();
var qString = "SELECT password FROM users WHERE username='" + user + "'";
var query = client.query(qString);
query.on('row', function(row) {
callback(row.password);
});
};
我知道,这是验证一个不安全的方式。我想知道是否有更好的方法来做到这一点。我试图根据密码是否匹配返回一个布尔值。
退房http://stackoverflow.com/a/16021543/893780,我回答了类似的问题。 – robertklep
请参阅编辑,仍然返回未定义。 –
关于你的编辑:'quecall'没有返回值,所以'returned'当然是'undefined'。您应该将回调传递给'caller',完全如@robertklep所示。 – apsillers