У меня проблема с функциями обратного вызова JavaScript. Я использую узел Js и node-mysql для обработки запросов mysql. Когда новые пользователи регистрируются, мне нужно сделать проверку 2 db, если это письмо уже зарегистрировано и если этот псевдоним уже существует, и после этого создайте инструкцию INSERT. Но проблема в том, что я не знаю, как поймать, когда проверяется электронная почта и проверяется псевдоним, поскольку у них есть две разные функции обратного вызова. Пожалуйста, помогите мне, как это сделать наилучшим образом.Функция обработки Javascript после двойного обратного вызова
- Console.log выглядел так!
- Проверка на картинке:
- Проверка на вашем телефоне!
- Вставка нового ряда! - Это должно быть последним, но это здесь: (((
- Ник CallBack
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; } }
Да, я думаю о таймерах, но я надеюсь, что есть еще одно решение без таймеров ... – user3278989