Ano, je, stačí změnit způsob, jakým o kódu přemýšlíte. Místo psaní email_already_exists_in_mysql
měli byste místo toho napsat funkci s názvem 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();
}
}
)
}
Pak místo psaní tohoto:
//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
}
místo toho to napíšete takto:
//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
})}
Nyní se můžete ptát sami sebe, co když po tom bude další? No, musíte upravit if_email_already_exists_in_mysql
funkce se chovat jako a if...else
místo just a 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();
}
}
)
}
takže to můžete nazvat takto:
//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
}
)}
Můžete napsat asynchronní kód, abyste dělali v podstatě cokoli, co běžný kód dokáže, pouze místo vracení hodnoty, kterou předáte zpětným voláním. Pamatujte:
návrat v synchronním kódu ==předávání zpětných volání v asynchronním kódu.
Struktura kódu proto musí být odlišná, ale jak jsem ukázal výše, logika, kterou chcete implementovat, může být naprosto stejná.