Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Função de retorno Javascript


Sim, você só precisa mudar a maneira como pensa sobre o código. Em vez de escrever email_already_exists_in_mysql você deve escrever uma função chamada 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();
            }
        }
    )
}

Então, em vez de escrever isso:
//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
}

você escreve assim:
//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
})}

Agora, você pode se perguntar, e se houver outro depois disso? Bem, você precisa modificar o if_email_already_exists_in_mysql função para se comportar como e if...else em vez de apenas 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();
            }
        }
    )
}

para que você possa chamá-lo assim:
//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
    }
)}

Você pode escrever código assíncrono para fazer praticamente qualquer coisa que o código normal possa fazer apenas em vez de retornar um valor que você passa em um retorno de chamada. Lembrar:

retornar em código síncrono ==passando em retornos de chamada em código assíncrono.

A estrutura do código deve, portanto, ser diferente, mas como demonstrei acima, a lógica que você deseja implementar pode ser exatamente a mesma.