Mysql
 sql >> Database >  >> RDS >> Mysql

Funzione di ritorno Javascript

Sì, devi solo cambiare il modo in cui pensi al codice. Invece di scrivere email_already_exists_in_mysql dovresti invece scrivere una funzione chiamata 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();
            }
        }
    )
}

Quindi invece di scrivere questo:

//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
}

lo scrivi invece così:

//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
})}

Ora, potresti chiederti, e se ce ne fosse un altro dopo quello? Bene, devi modificare if_email_already_exists_in_mysql funzione per comportarsi come e if...else invece di solo e 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();
            }
        }
    )
}

in modo che tu possa chiamarlo così:

//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
    }
)}

Puoi scrivere codice asincrono per fare praticamente qualsiasi cosa il codice normale può fare solo invece di restituire un valore passato in una callback. Ricorda:

ritorno in codice sincrono ==passando in callback in codice asincrono.

La struttura del codice deve quindi essere diversa ma, come ho dimostrato sopra, la logica che si desidera implementare può essere esattamente la stessa.