Ja, das tut es, Sie müssen nur Ihre Denkweise über Code ändern. Anstatt email_already_exists_in_mysql
zu schreiben Sie sollten stattdessen eine Funktion namens if_email_already_exists_in_mysql
schreiben :
/* 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();
}
}
)
}
Dann anstatt dies zu schreiben:
//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 schreibst es stattdessen so:
//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
})}
Jetzt fragen Sie sich vielleicht, was ist, wenn es danach noch einen anderen gibt? Nun, Sie müssen den if_email_already_exists_in_mysql
ändern Funktion, sich wie und if...else
zu verhalten statt nur und 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();
}
}
)
}
damit Sie es so nennen können:
//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
}
)}
Sie können asynchronen Code schreiben, um so ziemlich alles zu tun, was normaler Code tun kann, nur anstatt einen Wert zurückzugeben, den Sie in einem Callback übergeben. Denken Sie daran:
Zurück in synchronem Code ==Übergabe von Callbacks im asynchronen Code.
Die Codestruktur muss daher unterschiedlich sein, aber wie ich oben gezeigt habe, kann die Logik, die Sie implementieren möchten, genau gleich sein.