繁体   English   中英

双重回调后的Javascript处理函数

[英]Javascript process function after double callback

我的JavaScript回调函数有问题。 我正在使用节点Js和节点mysql处理mysql查询。 当新用户注册时,我需要做2分贝检查此电子邮件是否已经注册,该昵称是否已经存在,并在此创建INSERT语句之后。 但是问题是我不知道如何检查电子邮件和昵称,因为它们有2种不同的回调函数。 请帮助我如何做到这一点。

  1. Console.log看起来像这样!
  2. 检查昵称
  3. 正在检查电子邮件!
  4. 插入新行! -这必须是最后一个,但它在这里:(((
  5. 昵称回电!
  6. 电子邮件回电!

     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 counter = 0;

在支票邮件->柜台++;

在检查昵称->计数器++;

现在并行调用一个函数来检查邮件,检查昵称,让我们将其命名为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
 } 

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM