我正在尝试使用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
}
}
答案 0 :(得分:0)
您有两个错误
get_stored_password
函数不返回任何内容,这就是console.log(function_returning_nothing())
输出undefined
的原因您忘记了将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