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

Asked

Viewed 362 times

0

Sorry to come back in almost the same topic, but now when I use a Parse.Query to get my data in service.js, I’m not able to pass JSON with content to the controller(app.js), follows below excerpt 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);
                      }
            });
  }
}])            

excerpt from controller(app.js)

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

listaobjEquipes = EquipeService.getEscalacao(); <-- IS RETURNING OBJECT VÁZIO

I don’t know if this is the point where I’m putting Return, but the truth is that JSON is coming up empty in the controller, what procedure should I adopt to get JSON with content into the controller?

  • Please do not use citation formatting unnecessarily.

  • Does anyone have any idea how I can solve this case?

  • @leandrooriente, Continuing my tests, I found that when I use find() the object returns to empty for the controller, has some idea of solution in this context?

  • Someone can shed a light?

2 answers

2

I believe that the getEscalation() method you are calling in the controller is an asynchronous function (Because the Scalacaoquery.find(...) function is asynchronous) and Return is within the success function of the find method. Therefore, when the getEscalation() method is called in your controller, it is not yet filled.

    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
            });
  }
}])  

So in your controller you do:

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

});
  • Marcelo, good morning! I also made the changes as you mentioned in the code above, but the controller is not having an effect ... Equipeservice.getEscalacao(). then(Function(escalation){ console.log('does not display this log') }, Function(error){ });

  • Marcelo, good night to you! before then, I listed only listobjEquipes = Equipeservice.getEscalation(); then I made a listtxtEquipes = JSON.stringify(listobjEquipes); and the result obtained was {"$$state":{"status":0}}, but in the "/Do whatever you like" region the console.log() does not present absolutely anything, by the way, the log does not run, do you have any idea what might be happening? how should I proceed to be able to pass the contents of the JSON to the Database.

  • Marcelo, good morning! do you have any idea how I could solve?

0

The Parsereturns a promise.

The first step is to return this promisein the call of that function. If you do not give a return in it, the promise is lost within the function.

To hit this just change the following line:

Escalacaoquery.find({

for:

return Escalacaoquery.find({...

With the promise being returned, you still need to treat her return appropriately.

As promises are asynchronous, that is, they exit the default execution stack of your code and run in parallel. Therefore, you cannot receive the object directly to add to a variable. You need to take this result in the return of promise with the method then.

For this just 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 whatever is outside the then, will be executed before the return of promise, soon you won’t have access to the data.

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

  • good morning! I made the changes as you passed, but the controller is not having effect ... Equipeservice.getEscalacao(). then(Function(escalation){ console.log('does not display this log') }, Function(error){ });

  • good morning! have any idea how I could solve?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.