How to pass a content from JSON Object to a controller - Part 2 - Using Parse.Query

0

Sorry about the same thing on the same topic, but now when I use a Parse.Query to get my data in service.js, I am not able to pass the JSON with content to the controller (app.js), below is a snippet of the codes . service.js

var example = angular.module('starter')
example.service('EquipeService', ['$http', function($http) {
  var aDadosEscalacao = {};
  this.getEscalacao = function(params) {

            Parse.initialize('APPLICATION_ID', 'JAVASCRIPT_KEY'); 
            Parse.serverURL = 'https://parseapi.back4app.com';

            var EscalacaoObject = Parse.Object.extend("Escalacao");
            var Escalacaoquery = new Parse.Query(EscalacaoObject);

            if(params !== undefined) {
              if(params.idPeople !== undefined) {
                  Escalacaoquery.equalTo("jogador", params.idPeople);
              }        

              if(params.idPosicao !== undefined) {
                  Escalacaoquery.equalTo("jogoude", params.idPosicao);
              }        

              if(params.idEquipe !== undefined) {
                  Escalacaoquery.equalTo("time", params.idEquipe);
              }        

              if(params.idEvento !== undefined) {
                  Escalacaoquery.equalTo("pelada", params.idEvento);
              }        
            }

            Escalacaoquery.find({
                    success: function(results) {
                        //console.log("Em Escalacao, achamos " + results.length + " jogadores escalados!");

                        for (var i = 0; i < results.length; i++) {

                            var object = results[i];

                            var jogadortxtJSON = JSON.stringify(object.get("jogador"));
                            var jogoudetxtJSON = JSON.stringify(object.get("jogoude"));
                            var timetxtJSON = JSON.stringify(object.get("time"));
                            var peladatxtJSON = JSON.stringify(object.get("pelada"));
                            var golstxtJSON = JSON.stringify(object.get("Gols"));
                            var faltastxtJSON = JSON.stringify(object.get("faltas"));
                            var crtamarelotxtJSON = JSON.stringify(object.get("cartao_amarelo"));
                            var crtvermelhotxtJSON = JSON.stringify(object.get("cartao_vermelho"));
                            var ptoscraquetxtJSON = JSON.stringify(object.get("PontuacaoCraque"));
                            var ptosdestaquetxtJSON = JSON.stringify(object.get("PontuacaoDestaque"));
                            var ptosmastertxtJSON = JSON.stringify(object.get("PontuacaoMaster"));
                            var ptosgoleirotxtJSON = JSON.stringify(object.get("pontuacaogoleiro"));


                            idtxtjogador = JSON.parse(jogadortxtJSON);
                            idjogador = idtxtjogador.objectId                //id do jogador
                            idtxtjogoude = JSON.parse(jogoudetxtJSON); 
                            idjogoude = idtxtjogoude.objectId                //id jodou de ...
                            idtxttime    = JSON.parse(timetxtJSON);  
                            idtime = idtxttime.objectId                      //id da Equipe/Time
                            idtxtpelada  = JSON.parse(peladatxtJSON); 
                            idpelada  = idtxtpelada.objectId                 //id da pelada/evento. 
                            ngolsjogador = JSON.parse(golstxtJSON);          //Quantidade de Gols do Jogador
                            faltastxtJSON = JSON.parse(faltastxtJSON);       //Quantidade de Faltas do Jogador
                            ncrtamarelos = JSON.parse(crtamarelotxtJSON);    //Quantidade de Cartões Amarelos
                            ncrtvermelhos = JSON.parse(crtvermelhotxtJSON);  //Quantidade de Cartões Vermelhos
                            nptoscraque = JSON.parse(ptoscraquetxtJSON);     //Quantidade de Pontos para eleição do Craque
                            nptosdestaque = JSON.parse(ptosdestaquetxtJSON); //Quantidade de Pontos para eleição Destaque
                            nptosmaster = JSON.parse(ptosmastertxtJSON);     //Quantidade de Pontos para eleição Master
                            nptosgoleiro = JSON.parse(ptosgoleirotxtJSON);   //Quantidade de Pontos para eleição Goleiro

                            aDadosEscalacao = { "idjogador": idjogador, 
                                                "idtime": idtime,
                                                "idjogoude": idjogoude,
                                                "idpelada": idpelada,
                                                "gols": ngolsjogador,
                                                "faltas": faltastxtJSON,
                                                "cartao_amarelo": ncrtamarelos,
                                                "cartao_vermelho": ncrtvermelhos,
                                                "pontuacaocraque": nptoscraque,
                                                "pontuacaodestaque": nptosdestaque,
                                                "pontuacaomaster": nptosmaster,
                                                "pontuacaogoleiro": nptosgoleiro };
                        }
                        return aDadosEscalacao
                    },
                      error: function(error) {
                          alert("Error: " + error.code + " " + error.message);
                      }
            });
  }
}])            
  

controller snippet (app.js)

example.controller('equipecontrol', ['EquipeService','$scope', function( EquipeService,$scope) {      
    equipes =  { "nomejogador": '',
                 "posioriginal":'',
                 "nomedotime": '',
                 "jogoude": ''
                };

listaobjEquipes = EquipeService.getEscalacao();     

asked by anonymous 28.03.2017 / 17:19

2 answers

2

I believe that the getEscalacao () method that you are calling in the controller, is an asynchronous function (Because of the function Escalacaoquery.find (...) to be asynchronous) and the return is within the find method's success function . So when the getScaling () method is called in your controller, it is not yet populated.

    var example = angular.module('starter')
example.service('EquipeService', ['$http', '$q', function($http, $q) {
  var aDadosEscalacao = {};
  this.getEscalacao = function(params) {
             var deferred = $q.defer();
            Parse.initialize('APPLICATION_ID', 'JAVASCRIPT_KEY'); 
            Parse.serverURL = 'https://parseapi.back4app.com';

            var EscalacaoObject = Parse.Object.extend("Escalacao");
            var Escalacaoquery = new Parse.Query(EscalacaoObject);

            if(params !== undefined) {
              if(params.idPeople !== undefined) {
                  Escalacaoquery.equalTo("jogador", params.idPeople);
              }        

              if(params.idPosicao !== undefined) {
                  Escalacaoquery.equalTo("jogoude", params.idPosicao);
              }        

              if(params.idEquipe !== undefined) {
                  Escalacaoquery.equalTo("time", params.idEquipe);
              }        

              if(params.idEvento !== undefined) {
                  Escalacaoquery.equalTo("pelada", params.idEvento);
              }        
            }

            Escalacaoquery.find({
                    success: function(results) {
                        //console.log("Em Escalacao, achamos " + results.length + " jogadores escalados!");

                        for (var i = 0; i < results.length; i++) {

                            var object = results[i];

                            var jogadortxtJSON = JSON.stringify(object.get("jogador"));
                            var jogoudetxtJSON = JSON.stringify(object.get("jogoude"));
                            var timetxtJSON = JSON.stringify(object.get("time"));
                            var peladatxtJSON = JSON.stringify(object.get("pelada"));
                            var golstxtJSON = JSON.stringify(object.get("Gols"));
                            var faltastxtJSON = JSON.stringify(object.get("faltas"));
                            var crtamarelotxtJSON = JSON.stringify(object.get("cartao_amarelo"));
                            var crtvermelhotxtJSON = JSON.stringify(object.get("cartao_vermelho"));
                            var ptoscraquetxtJSON = JSON.stringify(object.get("PontuacaoCraque"));
                            var ptosdestaquetxtJSON = JSON.stringify(object.get("PontuacaoDestaque"));
                            var ptosmastertxtJSON = JSON.stringify(object.get("PontuacaoMaster"));
                            var ptosgoleirotxtJSON = JSON.stringify(object.get("pontuacaogoleiro"));


                            idtxtjogador = JSON.parse(jogadortxtJSON);
                            idjogador = idtxtjogador.objectId                //id do jogador
                            idtxtjogoude = JSON.parse(jogoudetxtJSON); 
                            idjogoude = idtxtjogoude.objectId                //id jodou de ...
                            idtxttime    = JSON.parse(timetxtJSON);  
                            idtime = idtxttime.objectId                      //id da Equipe/Time
                            idtxtpelada  = JSON.parse(peladatxtJSON); 
                            idpelada  = idtxtpelada.objectId                 //id da pelada/evento. 
                            ngolsjogador = JSON.parse(golstxtJSON);          //Quantidade de Gols do Jogador
                            faltastxtJSON = JSON.parse(faltastxtJSON);       //Quantidade de Faltas do Jogador
                            ncrtamarelos = JSON.parse(crtamarelotxtJSON);    //Quantidade de Cartões Amarelos
                            ncrtvermelhos = JSON.parse(crtvermelhotxtJSON);  //Quantidade de Cartões Vermelhos
                            nptoscraque = JSON.parse(ptoscraquetxtJSON);     //Quantidade de Pontos para eleição do Craque
                            nptosdestaque = JSON.parse(ptosdestaquetxtJSON); //Quantidade de Pontos para eleição Destaque
                            nptosmaster = JSON.parse(ptosmastertxtJSON);     //Quantidade de Pontos para eleição Master
                            nptosgoleiro = JSON.parse(ptosgoleirotxtJSON);   //Quantidade de Pontos para eleição Goleiro

                            aDadosEscalacao = { "idjogador": idjogador, 
                                                "idtime": idtime,
                                                "idjogoude": idjogoude,
                                                "idpelada": idpelada,
                                                "gols": ngolsjogador,
                                                "faltas": faltastxtJSON,
                                                "cartao_amarelo": ncrtamarelos,
                                                "cartao_vermelho": ncrtvermelhos,
                                                "pontuacaocraque": nptoscraque,
                                                "pontuacaodestaque": nptosdestaque,
                                                "pontuacaomaster": nptosmaster,
                                                "pontuacaogoleiro": nptosgoleiro };
                        }
                       deferred.resolve(aDadosEscalacao);
                    },
                      error: function(error) {
                          alert("Error: " + error.code + " " + error.message);
                     deferred.reject(error);
                      }
             return deferred.promise
            });
  }
}])  

Then, in your controller you do:

    listaobjEquipes = EquipeService.getEscalacao().then(function(escalacao){
        //Do whatever you like
}, function(error){

});
    
30.03.2017 / 01:33
0

The Parse returns a promise .

The first step is to return this promise in the call of this function. If you do not give return to it, promise gets lost inside the function.

To get this right, change the following line:

Escalacaoquery.find({

To:

return Escalacaoquery.find({...

With promise being returned, you still need to handle the return of it properly.

The promises are asynchronous, that is, they exit the default execution stack of your code and run in parallel. So you can not get the object directly to add to a variable. You need to get this result in the promise return with the then method.

To do this simply change your code to:

EquipeService.getEscalacao().then(function(dados) {
  // Faça o que quiser com os dados que retornaram da promise.
  funcaoQuePrecisaDosDados(dados);
})

Always keep in mind that anything outside then will be executed before promise return, so you will not have access to the data.

To work on the data you received, only by using within then or by calling a function inside it and passing it as a parameter.

    
30.03.2017 / 02:12