2015-06-06 8 views
2

У меня проблема с функциями обратного вызова JavaScript. Я использую узел Js и node-mysql для обработки запросов mysql. Когда новые пользователи регистрируются, мне нужно сделать проверку 2 db, если это письмо уже зарегистрировано и если этот псевдоним уже существует, и после этого создайте инструкцию INSERT. Но проблема в том, что я не знаю, как поймать, когда проверяется электронная почта и проверяется псевдоним, поскольку у них есть две разные функции обратного вызова. Пожалуйста, помогите мне, как это сделать наилучшим образом.Функция обработки Javascript после двойного обратного вызова

  1. Console.log выглядел так!
  2. Проверка на картинке:
  3. Проверка на вашем телефоне!
  4. Вставка нового ряда! - Это должно быть последним, но это здесь: (((
  5. Ник CallBack
  6. Email CallBack

    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;

В контрольной почте -> счетчик ++;

В регистрации никнейма -> счетчик ++;

теперь называем функцию параллельно, чтобы проверить почту, проверьте имя ника, давайте назовем его checkStatus

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

} 
+0

Да, я думаю о таймерах, но я надеюсь, что есть еще одно решение без таймеров ... – user3278989

0

Вот еще один способ его достижения без таймеров.

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 
} 

} 
Смежные вопросы