Ya, Anda hanya perlu mengubah cara berpikir Anda tentang kode. Alih-alih menulis email_already_exists_in_mysql
Anda sebaiknya menulis fungsi yang disebut 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();
}
}
)
}
Kemudian alih-alih menulis ini:
//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
}
Anda menulisnya seperti ini sebagai gantinya:
//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
})}
Sekarang, Anda mungkin bertanya pada diri sendiri, bagaimana jika ada hal lain setelah itu? Nah, Anda perlu memodifikasi if_email_already_exists_in_mysql
berfungsi untuk berperilaku seperti dan if...else
bukannya adil dan 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();
}
}
)
}
sehingga Anda dapat menyebutnya seperti ini:
//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
}
)}
Anda dapat menulis kode async untuk melakukan hampir semua hal yang hanya dapat dilakukan oleh kode biasa alih-alih mengembalikan nilai yang Anda berikan dalam panggilan balik. Ingat:
kembali dalam kode sinkron ==meneruskan panggilan balik dalam kode asinkron.
Oleh karena itu, struktur kode harus berbeda tetapi seperti yang saya tunjukkan di atas, logika yang ingin Anda terapkan bisa sama persis.