Ja det gör det, du behöver bara ändra ditt sätt att tänka på kod. Istället för att skriva email_already_exists_in_mysql
du bör istället skriva en funktion som heter 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();
}
}
)
}
Då istället för att skriva detta:
//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 så här istället:
//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 fråga dig själv, vad händer om det finns en annan efter det? Tja, du måste ändra if_email_already_exists_in_mysql
funktion för att bete sig som och if...else
istället för just och 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å att du kan kalla det så här:
//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 skriva asynkron kod för att göra i stort sett allt som vanlig kod bara kan göra istället för att returnera ett värde du skickar i en återuppringning. Kom ihåg:
retur i synkron kod ==passerar i återuppringningar i asynkron kod.
Kodstrukturen måste därför vara annorlunda men som jag visade ovan kan logiken du vill implementera vara exakt densamma.