Ir para conteúdo

Arquivado

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

CrazyLOL

Asynchronous e Sequencial script

Recommended Posts

Galera to com uma bronca que ainda não consegui resolver, e está tirando meu sono...

Já fiz várias pesquisas, e preciso que meu script execute de forma sequencial o script, isto é hora q termina um vai para o outro e assim por diante.

 

O problema é que encontrei várias coisas falando sobre callback, ja tentei fazer algumas coisas mas acho que fiz algo de errado pq nao funciona.. gostaria se caso alguem puder me explicar de forma mais clara atraves do meu codigo, ficaria agradecido.

 

Bom primeiro de tudo, eu to fazendo um app e nesse app estou usando o banco Sqlite para salvar informacoes offline, quando a pessoa abre o app eu conecto no meu banco de dados e gero varias query onde uma é criando a tabela exemplo "create table usuarios....." e a outra seria populando a database que é "insert into usuarios.....", como citei esta funcionando, mas o problema que ele executa de forma tudo asynchronous e dependendo trava o meu app quando pega alguma tabela com muita informação, digo isso pq mesmo quando desaparece a mensagem de "Aguarde" ele continua trabalhando e inserindo os dados no Sqlite.

 

Meu script que faz esse trabalho no App está abaixo:

var _db;

var DataBase = {

    url : 'http://192.168.1.26:9075/',

    //construtor 
    init: function(){        

        try{
            _db = window.sqlitePlugin.openDatabase(
                {
                    name: "BancoLab123.db",
                    location: 0 //1
                });
        }catch(e){
            Funcoes.alerta(e,'Erro');
        }
        
       DataBase.checarBanco();        
    },

    checarBanco: function(){
        //verifica se possui internet
        //if(Funcoes._internet() === true){
            var consulta = "SELECT count(*) as total FROM sqlite_master WHERE type = 'table' AND name = 'usuarios'";
            _db.transaction(function (tx) {
                tx.executeSql(consulta,[], function (ts,result){
                    var dataset = result.rows.item(0);
                    if(dataset.total > 0){
                        //já possui banco criado
                    }else{
                      User.setUsuarioLogin('');
                      
                      DataBase.criarTabela('saude.log','N','');

                        var arr = [
                                    'lab.usuarios',
                                    'lab.usuarios_acessos',
                                    'lab.vendas',                              
                                 ];

                         arr.forEach(function(valor,chave){                            
                            DataBase.criarTabela(valor,'S','');
                        }); 
                      
                    }
                },function (t,e){

                });
            });
        //}        
    },

    criarTabela: function(tbl,tipo,unidade){    
        var nome = tbl.split('.');            
        myApp.showPreloader('Criando tabela: '+nome[1]);

        console.log(tbl);
        $$.ajax({
                type: "GET",
                url: DataBase.url+"procDataBase.php?acao=CriarTabelas&tabela="+tbl,
                complete:function(){
                    myApp.hidePreloader();
                },
                success: function (json) {   
                     
                     var json = JSON.parse(json);
                     //console.log(json); 

                     _db.transaction(function (tx) {
                        //console.log(json.query);
                        tx.executeSql(json.query, [], function (tx, res){
                           if(tipo == 'S')
                            DataBase.popularTabela(tbl,'');                          
                        }, function (t,e){
                            console.log(JSON.stringify(e));
                            Funcoes.alerta('Error '+nome[1]+': '+e.message,'Aviso');
                        });
                        
                    }); //fim transaction create table
                    myApp.hidePreloader();
                },error: function(){
                  Funcoes.alerta('Erro para criar tabela: '+nome[1]+' necessário criar tabela manualmente','Erro');    
                  myApp.hidePreloader();              
                }

        },"json");

    },

    popularTabela: function(tbl,unidade){
        var nome = tbl.split('.');
        myApp.showPreloader('Atualizando a tabela: '+nome[1]+ ', Isso pode levar alguns minutos, não feche o aplicativo');

        console.log("Populando: "+tbl);
        $$.ajax({
                type: "GET",
                url: DataBase.url+"procDataBase.php?acao=PopularDados&tabela="+tbl+"&unidade="+unidade,
                complete:function(){
                    myApp.hidePreloader();
                },               
                success: function (json) {
                    var json = JSON.parse(json);
                    if(json.result == true){
                        var tamanho = json.dados.length;

                       //if(nome[1] === 'ocupacao'){ console.log(JSON.stringify(json)); }
                       
                        for (var i = 0; i < tamanho; i++) {                    
                            if(json.dados[i] !== null && json.dados[i] !== 'null' && typeof(json.dados[i]) !== 'object'){
                                //console.log(json.dados[i]);
                                _db.executeSql(json.dados[i], [], function (tx, res){

                                }, function (t,e){
                                    Funcoes.alerta('Error: '+nome[1]+' '+e.message,'Aviso');
                                });
                            }
                        }; 
                    }                  
                  
                },error: function(){
                   Funcoes.alerta('Erro para atualizar tabela: '+nome[1]+ ' atualize manualmente a mesma.','Erro');
                   myApp.hidePreloader();  
                }
        },"json");

    },

    apagarTabela: function(tbl){   
      
      navigator.notification.confirm(
        'Deseja realmente apagar esta tabelas?',
            function (btn){                                        
                if(btn == 1){
                    var  query = 'drop table '+tbl;
                    _db.transaction(function (tx) {                          
                        tx.executeSql(query, [], function (ts,res){

                        }, function (t,e){

                        });
                    });                                              
                }else{

                }
            },
            'Apagar tabela',
            ['Sim','Nao']); 

    }
};


O exemplo de retorno esta sendo assim por exemplo:

{"tabelas":"usuario","query":"CREATE TABLE IF NOT EXISTS usuario (USUARIO_ID INTEGER,PESSOA_FISICA_ID INTEGER,USUARIO_LOGIN TEXT,USUARIO_SENHA TEXT,USUARIO_ALTERAR_SENHA TEXT,USUARIO_QUANTIDADE_SESSAO INTEGER,USUARIO_ATIVO TEXT);"} 

O que está sendo bronca, as funcoes, criarTabela, e popularTabela só poderiam ser executadas quando uma finalizar exemplo, a criar tabela executa primeiro, depois que executar o script para criar a tabela ai sim seria chamado o popular tabela, esta seria correto.

 

Agradeço antecipado toda a ajuda...

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.