我遇到了JavaScript回调函数的问题。我使用节点Js和node-mysql来处理mysql查询。当新用户注册时,我需要进行2分贝检查,如果此电子邮件已经注册,并且此昵称已经存在,则在此之后创建INSERT语句。但问题是,我不知道在检查电子邮件和检查昵称时如何捕获,因为它们有2种不同的回调函数。请帮助我如何做到这一点。
电子邮件回复!
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;
}
}
答案 0 :(得分:0)
在函数开始时,我们假设你有一个var counter = 0;
在支票邮件中 - >计数器++;
检查昵称 - >计数器++;
现在并行调用函数来检查邮件,检查昵称,让我们将其命名为checkStatus
function checkStatus(){
if(counter == 2) {
// Call the callback
} else {
setTimeout(checkStatus, 1000);
}
}
答案 1 :(得分:0)
这是在没有计时器的情况下实现它的另一种方法。
if let bd = birthDate! as? NSDate { ... continue save ... }
else { doAlert("You need to specify your birth date") }