sql >> Base de Datos >  >> RDS >> Mysql

Función de retorno Javascript

Sí, solo necesita cambiar la forma en que piensa sobre el código. En lugar de escribir email_already_exists_in_mysql en su lugar, debe escribir una función llamada 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();
            }
        }
    )
}

Entonces, en lugar de escribir esto:

//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 escribes así en su lugar:

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

Ahora, puede preguntarse, ¿y si hay otro más después de ese? Bueno, necesitas modificar el if_email_already_exists_in_mysql función para comportarse como y if...else en lugar de solo y 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();
            }
        }
    )
}

para que puedas llamarlo así:

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

Puede escribir código asíncrono para hacer prácticamente cualquier cosa que el código normal pueda hacer en lugar de devolver un valor que pasa en una devolución de llamada. Recuerda:

volver en código síncrono ==pasando devoluciones de llamada en código asíncrono.

Por lo tanto, la estructura del código debe ser diferente, pero como demostré anteriormente, la lógica que desea implementar puede ser exactamente la misma.