双重回调后的Javascript进程函数
我对JavaScript回调函数有问题。我使用NodeJS和NodeMySQL来处理mysql查询。当新用户注册时,我需要做2分贝检查,如果这封电子邮件已经注册,如果这个昵称已经存在,在这个CREATEINSERT语句之后。但问题是,我不知道如何捕捉检查电子邮件和检查昵称的时间,因为它们有两个不同的回调函数。请帮助我如何做到最好双重回调后的Javascript进程函数,javascript,mysql,node.js,Javascript,Mysql,Node.js,我对JavaScript回调函数有问题。我使用NodeJS和NodeMySQL来处理mysql查询。当新用户注册时,我需要做2分贝检查,如果这封电子邮件已经注册,如果这个昵称已经存在,在这个CREATEINSERT语句之后。但问题是,我不知道如何捕捉检查电子邮件和检查昵称的时间,因为它们有两个不同的回调函数。请帮助我如何做到最好 Console.log看起来像这样 检查昵称 检查电子邮件 正在插入新行!——这必须是最后一个,但它在这里:((( 绰号 回电话 回邮 checkNickName(ni
checkNickName(nickname);
var checkMail = checkEmail(email);
if(!checkMail){ // The problem is when this runs CallBack still not received from Mail and from NickName too
console.log('Inserting new row!');
connection.query("INSERT INTO `user` (`email`, `password`, `nickname`, `auth`, `token`, `balance`, `role`, `language`, `last_visit`, `register_date`) VALUES ('"+email+"', '"+password+"', '"+nickname+"', '"+auth+"', '"+token+"', '"+balance+"', '"+role+"', '"+language+"', CURRENT_TIMESTAMP, '"+registerDate+"');", function(err, rows, fields) {
if (err) return 2;
console.log(rows);
return 3;
});
}
function checkNickName(nickname){
console.log('Checking nickname');
connection.query("SELECT id FROM user WHERE `nickname` = '"+nickname+"'", function(err, rows, fields) {
if (err) callback(err);
callback(rows);
});
function callback(res){
console.log('Nickname CallBack!');
if (!res) { nickname = nickname + Math.floor((Math.random() * 10000) + 1); }
return res;
}
}
function checkEmail(email){
console.log('Checking Email!');
connection.query("SELECT id FROM user WHERE `email` = '"+email+"'", function(err, rows, fields) {
if (err) callback('email',false);
callback(rows);
});
function callback(res){
console.log('Email CallBack!');
if (!res) { nickname = nickname + Math.floor((Math.random() * 10000) + 1); }
return res;
}
}
在函数的开头,我们假设您有一个var计数器=0 在支票邮件->计数器++ 在检查昵称->计数器++ 现在并行调用一个函数来检查邮件,检查nick name,让我们将其命名为checkStatus
function checkStatus(){
if(counter == 2) {
// Call the callback
} else {
setTimeout(checkStatus, 1000);
}
}
这是另一种不用定时器就能实现的方法
callfunction("event1"); // call this function on execution of event 1
callfunction("event2"); // call this function one execution of event 2
var eventObj = {
event1: false,
event2: false
}; // event object
// function
function callfunction(eventFrom) {
if(eventFrom === "event1") {
eventObj.event1 = true;
} else {
eventObj.event2 = true;
}
// if condition will be true only when both the events are fired
if(eventObj.event2 === true && eventObj.event1 === true) {
// callback function
}
}
是的,我考虑过定时器,但我希望有一些没有定时器的解决方案。。。