我有一個JavaScript回調函數的問題。我使用節點Js和node-mysql來處理mysql查詢。當新用戶註冊時,我需要做2分貝檢查,如果這封電子郵件已經註冊,並且這個暱稱已經存在,並且在此之後創建INSERT語句。但問題是,我不知道如何檢查電子郵件檢查和暱稱檢查,因爲他們有2個不同的回調函數。請幫助我如何做到這一點最好的方式。雙重回調後的Javascript處理函數
- 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; } }
是的,我想到了定時器,但我希望有一些沒有定時器的另一種解決方案... – user3278989