Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双重回调后的Javascript进程函数_Javascript_Mysql_Node.js - Fatal编程技术网

双重回调后的Javascript进程函数

双重回调后的Javascript进程函数,javascript,mysql,node.js,Javascript,Mysql,Node.js,我对JavaScript回调函数有问题。我使用NodeJS和NodeMySQL来处理mysql查询。当新用户注册时,我需要做2分贝检查,如果这封电子邮件已经注册,如果这个昵称已经存在,在这个CREATEINSERT语句之后。但问题是,我不知道如何捕捉检查电子邮件和检查昵称的时间,因为它们有两个不同的回调函数。请帮助我如何做到最好 Console.log看起来像这样 检查昵称 检查电子邮件 正在插入新行!——这必须是最后一个,但它在这里:((( 绰号 回电话 回邮 checkNickName(ni

我对JavaScript回调函数有问题。我使用NodeJS和NodeMySQL来处理mysql查询。当新用户注册时,我需要做2分贝检查,如果这封电子邮件已经注册,如果这个昵称已经存在,在这个CREATEINSERT语句之后。但问题是,我不知道如何捕捉检查电子邮件和检查昵称的时间,因为它们有两个不同的回调函数。请帮助我如何做到最好

  • Console.log看起来像这样
  • 检查昵称
  • 检查电子邮件
  • 正在插入新行!——这必须是最后一个,但它在这里:(((
  • 绰号 回电话
  • 回邮

    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
     } 
    
    }
    

    是的,我考虑过定时器,但我希望有一些没有定时器的解决方案。。。