gpt4 book ai didi

双重回调后的Javascript处理函数

转载 作者:行者123 更新时间:2023-11-29 03:31:01 27 4
gpt4 key购买 nike

我对 JavaScript 回调函数有疑问。我正在使用 Node Js 和 Node 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;

在检查邮件中 -> counter++;

在检查昵称->counter++;

现在并行调用一个函数来检查邮件,检查昵称,我们将其命名为checkStatus

function checkStatus(){
if(counter == 2) {
// Call the callback
} else {
setTimeout(checkStatus, 1000);
}

}

关于双重回调后的Javascript处理函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com