はい、そうです。コードについての考え方を変える必要があります。 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
のように動作する関数 と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
}
)}
コールバックで渡した値を返す代わりに、通常のコードでしか実行できないほとんどすべてのことを実行する非同期コードを記述できます。覚えておいてください:
戻る 同期コードで==コールバックを渡す 非同期コードで。
したがって、コード構造は異なる必要がありますが、上記で示したように、実装するロジックはまったく同じにすることができます。