Có, bạn chỉ cần thay đổi cách bạn nghĩ về mã. Thay vì viết email_already_exists_in_mysql
thay vào đó, bạn nên viết một hàm có tên là 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();
}
}
)
}
Sau đó, thay vì viết thế này:
//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
}
thay vào đó bạn viết nó như thế này:
//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
})}
Bây giờ, bạn có thể tự hỏi mình, điều gì sẽ xảy ra nếu có một cái khác sau đó? Chà, bạn cần sửa đổi if_email_already_exists_in_mysql
hàm để hoạt động như và if...else
thay vì chỉ và 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();
}
}
)
}
để bạn có thể gọi nó như thế này:
//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
}
)}
Bạn có thể viết mã không đồng bộ để thực hiện hầu hết mọi thứ mà mã thông thường chỉ có thể làm thay vì trả về giá trị bạn chuyển trong lệnh gọi lại. Ghi nhớ:
quay lại trong mã đồng bộ ==chuyển vào lệnh gọi lại trong mã không đồng bộ.
Do đó, cấu trúc mã phải khác nhưng như tôi đã trình bày ở trên, logic bạn muốn triển khai có thể giống hệt nhau.