为什么javascript返回true或false的对象位置

时间:2015-03-13 23:46:50

标签: javascript node.js

我尝试获取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。 我无法序列化结果,因为它是一个圆形对象。

错误在哪里?

3 个答案:

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

}