回调函数不起作用node.js

时间:2018-11-08 19:21:02

标签: node.js callback electron

我正在尝试使用node.js构建登录系统,并且卡在此回调函数错误中,我已设法构建获取登录信息并使用数据库对其进行检查,但是当我验证密码时,这需要一些时间,因此那里我需要使用回调函数,但是即使我使用了回调函数,它也给了我同样的错误,这是因为验证或数据库调用花费时间在我的情况下执行其他操作。  我试图以另一种方式实现这种方式,只是尝试console.log命令,然后全部以相反的方式执行我的结果

这是运行顺序 3 2 未定义 1 但是我需要运行这个完全相反的方式,我应该使用promise而不是回调吗?

const {ipcMain} = require('electron');
const Password = require("node-php-password");
const connection = require("./connection");

var hash;
var done;
var self = module.exports = {
   getuser_information:function(user_name,pwd,callback){

    connection.query("SELECT * FROM `super_admin` WHERE ad_un = ?", user_name, function(err, result, fildes) {
        if (err) throw err;
        let numbers_retuned = result.length;
        hash = result[0].desk;
        console.log(1);

    });
    callback(hash,self.true_or_not);
},
hashverif:function(hash,true_or_not){
    true_or_not();
    console.log(2);
},
true_or_not:function(){
    console.log(3);
    return 1

}

}

1 个答案:

答案 0 :(得分:0)

评论后更新

您有两个错误

  1. 调用回调函数时,您的get_stored_password函数不返回任何内容,这就是console.log(function_returning_nothing())输出undefined的原因

  1. 您忘记了将done传递给您的回调函数     get_stored_password的定义callback(done)

    const {
        ipcMain
    } = require('electron');
    const Password = require("node-php-password");
    const connection = require("./connection");
    
    var hash;
    var done;
    var self = module.exports = {
        get_stored_password: function(name, pwd, callback) {
            connection.query("SELECT * FROM `super_admin` WHERE ad_un = ?", name, function(err, result, fildes) {
                if (err) throw err;
                let numbers_retuned = result.length;
                hash = result[0].desk;
    
                if (numbers_retuned == 1) {
                    var test = pwd;
                    done = Password.verify(test, hash);
    
    
    
                } else {
                    console.log('no');
                    return 0;
                }
    
    
                //you must pass an argument to your callback function
                // and return done var to get an output when you log this function
                callback(done);
                return done;
            });
    
        },
        chek_if_true: function(done) {
            console.log(done);
            if (done) {
                return true;
    
            } else {
                return false;
            }
        }
    }
    

这就是为什么当您将done登录到控制台时是undefined