Да, така е, просто трябва да промените начина, по който мислите за кода. Вместо да пишете email_already_exists_in_mysql
вместо това трябва да напишете функция, наречена 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();
}
}
)
}
Тогава вместо да пишете това:
//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
}
вместо това го пишете така:
//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
})}
Сега, може да се запитате, ами ако има още един след това? Е, трябва да промените if_email_already_exists_in_mysql
функция да се държи като и if...else
вместо just и 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();
}
}
)
}
за да можете да го наречете така:
//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
}
)}
Можете да напишете асинхронен код, за да правите почти всичко, което обикновеният код може да направи, вместо да връща стойност, която предавате в обратно извикване. Запомнете:
връщане в синхронен код ==предаване на обратни извиквания в асинхронен код.
Следователно структурата на кода трябва да е различна, но както демонстрирах по-горе, логиката, която искате да приложите, може да бъде абсолютно същата.