Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rückgabefunktion Javascript

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.