Ir para conteúdo

Arquivado

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

CrazyLOL

Logica do Callback

Recommended Posts

Galera estou com um pequeno problema e gostaria de um auxilio para entender e se possível uma indicação dos Srs para ajudar este problema.

 

Vamos ao inicio, atualmente possuo um loop, estou fazendo ele em um for ficando algo parecido do codigo abaixo:

for(var i = 0; i < 1500; i++){
 console.log("Valor "+i);
}

Dentro deste loop estou chamando uma função que está atualizando alguns informações, e nesta mesma função estou usando callback no final. (pelo meu entendimento o callback seria para dar tipo de um pause no codigo sendo que so vai continuar se houver o callback certo? ) O codigo esta abaixo

var Anonimo = {
  
  minhaFuncao: function(indice,callback){
    //faz algumas coisas
    
    //finaliza com callback
    callback(retornaAlgumaVariavel);
  }

}

Até aqui beleza.. Meu codigo completo ate aqui ficou da seguinte maneira:

var Anonimo = {
  
  minhaFuncao: function(indice,callback){
    //faz algumas coisas
    
    //finaliza com callback
    callback(retornaAlgumaVariavel);
  }

}


for(var i = 0; i < 1500; i++){
 console.log("Valor "+i);

 Anonimo.minhaFuncao(i, function(variavelRetorno){
  console.log("Entrou no indice "+i);
 });
} 

pelo meus debug está tendo a saída corretamente que seria, a cada indice do loop está executando o callback.. Exemplo

Valor 1
Entrou no indice 1
Valor 2
Entrou no indice 2
[....]

O problema está sendo no seguinte item... quando eu chamo a "minhaFuncao" eu passo o callback que é para executar algo quando finlizar a execução dele, neste caso estou passando mais uma função que possui também um callback... algo da seguinte maneira:

var OutroAnonimo = {
  
  outraFuncao: function(callback){
    //faz algumas coisas
    
    //finaliza com callback
    callback();
  }

}

O meu codigo completo ficou da seguinte maneira

for(var i = 0; i < 1500; i++){
 console.log("Valor "+i);

 Anonimo.minhaFuncao(i, function(variavelRetorno){
  console.log("Entrou no indice "+1);

  OutroAnonimo.outraFuncao(function(){
  	console.log("Passou aqui...");
  });
 });
}

O erro está no seguinte item, no Loop, eu passo pelo primeiro e segundo console.log porém quando chamo a "outraFuncao" ela é ignorada, melhor explicando, o o laço repetir 1500 vezes, no debug sai a mensagem "Valor e Entrou no indic..." porém depois que passou as 1500 vezes aparece as mensagens "Passou aqui".

 

A minha duvida final é, o que eu fiz de errado? ou o que faço para melhorar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo meu entendimento o callback seria para dar tipo de um pause no codigo sendo que so vai continuar se houver o callback certo?

não, não é isso que um callback é.

 

Se você não tem uma operação assíncrona, você não deveria usar callback. Só vai complicar sem necessidade teu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade gostaria que a operação fosse síncrona, isto é, na posição 1 ele faz tudo, entra na primeira função finalizou, vai para segunda função, finalizou a segunda ai sim vai para a posição 2....

Compartilhar este post


Link para o post
Compartilhar em outros sites

então não use callback.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas descrevendo, callback são "chamadas de retorno".

 

Funções assíncronas não são boas em manusear retornos, dessa forma, não devem utilizar retorno. Mas, se uma ação depende de um retorno de uma função assíncrona, esta poderá utilizar um callback.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, no caso estou usando o callback porque a função 2 só vai ser chamada depois que a função 1 foi executada.

Porem William, da maneira que citei o Loop é executado tudo de uma vez, você disse para não usar o callback mas o que eu posso utilizar para seguir de forma síncrona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a função é síncrona, chame uma função após a outra. Se precisa de algo dentro de alguma função, utilize retorno (return).

 

Entretanto, se ocorre algum problema, deve ser os tipos de códigos que é realizado dentro de cada função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplesmente não use callback. Você está usando errado.

E está se perdendo em uma coisa síncrona.

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.