Sì, devi solo cambiare il modo in cui pensi al codice. Invece di scrivere email_already_exists_in_mysql
dovresti invece scrivere una funzione chiamata 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();
}
}
)
}
Quindi invece di scrivere questo:
//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
}
lo scrivi invece così:
//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
})}
Ora, potresti chiederti, e se ce ne fosse un altro dopo quello? Bene, devi modificare if_email_already_exists_in_mysql
funzione per comportarsi come e if...else
invece di solo e 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();
}
}
)
}
in modo che tu possa chiamarlo così:
//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
}
)}
Puoi scrivere codice asincrono per fare praticamente qualsiasi cosa il codice normale può fare solo invece di restituire un valore passato in una callback. Ricorda:
ritorno in codice sincrono ==passando in callback in codice asincrono.
La struttura del codice deve quindi essere diversa ma, come ho dimostrato sopra, la logica che si desidera implementare può essere esattamente la stessa.