Tak, wystarczy zmienić sposób myślenia o kodzie. Zamiast pisać email_already_exists_in_mysql
zamiast tego powinieneś napisać funkcję o nazwie 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();
}
}
)
}
Następnie zamiast pisać to:
//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
}
piszesz to tak:
//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
})}
Teraz możesz zadać sobie pytanie, co jeśli po tym będzie jeszcze jeden? Cóż, musisz zmodyfikować if_email_already_exists_in_mysql
funkcja zachowywać się jak i if...else
zamiast just i 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();
}
}
)
}
więc możesz to nazwać tak:
//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
}
)}
Możesz napisać kod asynchroniczny, aby zrobić prawie wszystko, co zwykły kod może zrobić tylko zamiast zwracać wartość, którą przekazujesz w wywołaniu zwrotnym. Pamiętaj:
powrót w kodzie synchronicznym ==przekazywanie w wywołaniach zwrotnych w kodzie asynchronicznym.
Dlatego struktura kodu musi być inna, ale jak pokazałem powyżej, logika, którą chcesz zaimplementować, może być dokładnie taka sama.