Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CrazyLOL

Executar proxima função após finalizar a ultima

Recommended Posts

Galera estou com um pequeno problema.

 

Tenho uma função que dentro dela faço 2 verificacoes, que são outras 2 funções. Está funcionando em partes o problema está sendo o seguinte...

Pra deixar mais claro o codigo está abaixo:

    /**
    * Enviar uma campanha
    */
    sentCampanha: function(value){

        //verificar se já foi feito o envio desta campanha
        CampanhaEmail._isSent(value);
        if(CampanhaEmail.getStatusEnvio() > 0){
            //já foi feito o envio
            alert("Você já realizou o envio desta campanha");
        }else{
            // verificar se existe emails de clientes sem validar
            CampanhaEmail.loadClienteCampanha(value); 

            if(CampanhaEmail.getTotalCliente() > 0){
                if(confirm("Existe no momento "+CampanhaEmail.getTotalCliente()+" clientes para validar o Email, deseja realizar este processo agora?")){
                    CampanhaEmail.validarCliente(value,CampanhaEmail.getTotalCliente());
                }else{
                    //faz nada
                }
            }else{
                //limpa barra de progresso para caso ja tenha sido usada
                Funcoes.cleanProgress();
                //
                Funcoes.showLoading();
                //realiza o envio dos Emails Mostrando na barra de loading carregando
               $("#conteudo").load(App.getUrl()+"com/modules/mkt/controller/CampanhaEmailController.php?acao=EnviarEmails&campanha="+value);
            }
        }        
    },

Na hora que eu chamo a função "SentCampanha", a primeira verificação que faço é se a campanha ja foi enviado ( 0 = nao foi, 1 = foi ), para isso eu chamo a função:

 

CampanhaEmail._isSent(value);

Dentro dela estou adicionando um set do resultado Ok até ai.

 

Segunda verificação, vejo o total de clientes que estão com Email invalido, retornando o total de clientes.

CampanhaEmail.loadClienteCampanha(value);

Também está certo.

 

O problema é que para executar cada função leva um certo tempo, até consultar no banco e retornar o total, entre esse intervalo de tempo o script continua executando e os valores dos "get" das duas funções vem com o valor zerado (instancio os valores das variaveis em 0), e tecnicamente ele envia a campanha mesmo ja tem sido enviada e mesmo tendo clientes invalidos.

 

A pergunta é, que maneira que posso fazer para quando entrar na primeira função de verificação se já foi feito envio ou nao ele só continue após finalizar ele, e a mesma coisa na segunda função?

 

Agradeço já a ajuda antecipadamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc pode resolver de 2 formas:

 

-> Mudando os seus ajax para sincrono

-> Usando Promises, e só disparando a próxima ação no retorno da primeira Promise

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, até achei algo relacionado ao $.when.

 

Montei dessa maneira mas não adiantou:

$.when(
            CampanhaEmail._isSent(value),
            CampanhaEmail.loadClienteCampanha(value)
        ).then(function() {
            //verificar se já foi feito o envio desta campanha
            if(CampanhaEmail.getStatusEnvio() > 0){
                //já foi feito o envio
                alert("Você já realizou o envio desta campanha");
            }else{
                // verificar se existe emails de clientes sem validar
                if(CampanhaEmail.getTotalCliente() > 0){
                    if(confirm("Existe no momento "+CampanhaEmail.getTotalCliente()+" clientes para validar o Email, deseja realizar este processo agora?")){
                        CampanhaEmail.validarCliente(value,CampanhaEmail.getTotalCliente());
                    }else{
                        //faz nada
                    }
                }else{
                    //limpa barra de progresso para caso ja tenha sido usada
                    Funcoes.cleanProgress();
                    //
                    Funcoes.showLoading();
                    //realiza o envio dos Emails Mostrando na barra de loading carregando
                   $("#conteudo").load(App.getUrl()+"com/modules/mkt/controller/CampanhaEmailController.php?acao=EnviarEmails&campanha="+value);
                }
            }  
        });  

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.