【发布时间】:2015-06-06 21:09:03
【问题描述】:
我对 JavaScript 回调函数有疑问。我正在使用 node Js 和 node-mysql 来处理 mysql 查询。当新用户注册时,我需要执行 2 db 检查此电子邮件是否已注册以及此昵称是否已存在以及在此创建 INSERT 语句之后。但问题是我不知道在检查电子邮件和检查昵称时如何捕捉,因为它们有 2 个不同的回调函数。请帮助我如何以最好的方式做到这一点。
- 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; } }
【问题讨论】:
标签: javascript mysql node.js