Ja det gør det, du skal bare ændre den måde, du tænker på kode. I stedet for at skrive email_already_exists_in_mysql
du skal i stedet skrive en funktion kaldet 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();
}
}
)
}
Så i stedet for at skrive dette:
//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
}
du skriver det sådan her i stedet:
//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
})}
Nu kan du spørge dig selv, hvad hvis der er en anden efter det? Nå, du skal ændre if_email_already_exists_in_mysql
funktion til at opføre sig som og if...else
i stedet for bare og 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();
}
}
)
}
så du kan kalde det sådan her:
//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
}
)}
Du kan skrive asynkron kode for at gøre stort set alt, hvad almindelig kode kun kan gøre i stedet for at returnere en værdi, du sender i et tilbagekald. Husk:
retur i synkron kode ==passerer i tilbagekald i asynkron kode.
Kodestrukturen skal derfor være anderledes, men som jeg viste ovenfor, kan den logik, du vil implementere, være nøjagtig den samme.