Oui, il vous suffit de changer votre façon de penser au code. Au lieu d'écrire email_already_exists_in_mysql
vous devriez plutôt écrire une fonction appelée if_email_already_exists_in_mysql
:
/* Executes callback if email
* already exists in mysql:
*/
function if_email_already_exists_in_mysql (email,callback) {
connection.query(
'SELECT COUNT(*) AS nb FROM user WHERE emailUser = ' +
connection.escape(email),
function(err, rows, fields) {
if(rows[0].nb != 0) {
callback();
}
}
)
}
Alors au lieu d'écrire ceci :
//If the email hasn't a good format
if(email_not_good_format()) {
//I do something
}
else if(email_already_exists_in_mysql(email)) {
//I do something
}
vous l'écrivez comme ceci à la place :
//If the email hasn't a good format
if(email_not_good_format()) {
//I do something
}
else {if_email_already_exists_in_mysql(email),function(){
//I do something
})}
Maintenant, vous pouvez vous demander, et s'il y en avait un autre après ça ? Eh bien, vous devez modifier le if_email_already_exists_in_mysql
fonction pour se comporter comme et if...else
au lieu de juste et if
:
function if_email_already_exists_in_mysql (email,callback,else_callback) {
connection.query(
'SELECT COUNT(*) AS nb FROM user WHERE emailUser = ' +
connection.escape(email),
function(err, rows, fields) {
if(rows[0].nb != 0) {
callback();
}
else if(else_callback) {
else_callback();
}
}
)
}
pour que vous puissiez l'appeler comme ceci :
//If the email hasn't a good format
if(email_not_good_format()) {
//I do something
}
else {
if_email_already_exists_in_mysql(email),function(){
//I do something
},
// else
function(){
//I do something else
}
)}
Vous pouvez écrire du code asynchrone pour faire à peu près tout ce que le code normal ne peut faire qu'au lieu de renvoyer une valeur que vous transmettez dans un rappel. N'oubliez pas :
retour en code synchrone ==passant dans les rappels en code asynchrone.
La structure du code doit donc être différente mais comme je l'ai démontré plus haut la logique que vous souhaitez implémenter peut être exactement la même.