我尝试获取fonction的返回值(true或false),但结果只是一个循环对象,所以我不能使用这个函数。 使用的代码:
function check_session(data) {
var sql_read_req="SELECT * FROM "+appconfig['bdd_table']+" WHERE `"+appconfig['bdd_pseudo']+"`="+mySqlRead.escape(data.name)+" AND `"+appconfig['bdd_session_hash']+"`="+mySqlRead.escape(data.session)+" AND `"+appconfig['bdd_is_valide']+"`=1";
mySqlRead.query(sql_read_req, function (err, result){
if((result)&&(result.length!=0)){
console.log('session ok: '+result);
return true;
}
else {
return false;
}
});
}
所以check_session(data)
返回Object。
我无法序列化结果,因为它是一个圆形对象。
错误在哪里?
答案 0 :(得分:0)
尝试删除return
之前的mySqlRead.query
,返回值应该来自回调,而不是来自调用。
此外,您还需要向check_session
添加一个回调参数,您应该在mySqlRead.query
回调中调用该参数,例如
function check_session(data, cb) {
mySqlRead.query(sql_read_req, function(err, result) {
return cb(result && result.length);
});
}
check_session(SOME_DATA, function(itWorked) {
console.log('It worked?', itWorked);
});
答案 1 :(得分:0)
在没有其余代码的情况下,我无法100%确定,但mySqlRead.query很可能会返回一个承诺(doc about promises)。
当你调用check_session()时,你不应该对返回结果感到烦恼(除非你想在mySqlRead.query完成时做某事,比如链接承诺)
在您的情况下,您可能想要:
check_session(data).then(function(result){
console.log("The result is", result ,"!");
})
答案 2 :(得分:0)
我不完全确定我理解你在寻找什么,但是check_session(data)
没有返回值。 check_session(data)
实际上在调用传递给function(err, result)
的匿名函数mySqlRead
之前完成执行。在你的代码中,匿名函数返回一个结果,但没有做任何事情。
您可能想要做的是将回调传递回check_session(data)
,然后使用true或false参数调用
例如
function respondToRead(success){
if(success) ...
else ...
}
function check_session(data, callback) {
var sql_read_req="SELECT * FROM "+appconfig['bdd_table']+" WHERE `"+appconfig['bdd_pseudo']+"`="+mySqlRead.escape(data.name)+" AND `"+appconfig['bdd_session_hash']+"`="+mySqlRead.escape(data.session)+" AND `"+appconfig['bdd_is_valide']+"`=1";
mySqlRead.query(sql_read_req, function (err, result){
if((result)&&(result.length!=0)){
console.log('session ok: '+result);
callback(true);
}
else {
callback(false);
}
});
}