[JavaScript] Método somente é invocado com alert()

Pessoal estou com o seguinte problema!

tenho um método em um laço de repetição e preciso que ele seja invocado mais em cada passagem do indice.
O problema é que ele para na primeira posição do indice. Apenas se eu coloco o alert() ele força a chamada! Estou tentando entender isso!

alguem poderia me AJUDAR por favor? desde já OBRIGADO.


for(var i = 1; i < 3; i++){
											//alert('invocando metodo');					 
											params.catEntryId	= entitledItemJSON[i].catentry_id; //object JSON...
											params.quantity	= quantity;
											wc.service.invoke(ajaxShopCartService, params); //chamada do metodo para executar a cada laço
								  
								}

Esse erro não faz muito sentido… Aparentemente está tudo certo…

Tente colocar um console.log(); para colocar os valores dos objetos no console e ver se ele está passando certo…

creio que seja algo relacionado a timeOut e apenas quando dou um alert() o método é invocado.
Tentei solucionar usando um setInterval() ou setTimeout(), porem com o setInterval() já da o efeito de ficar invocando o método infinitamente, mesmo usando o clearInterval() após invocar a segunda vez!

var params = [];
for(var i = 1; i < 4; i++) {
//alert('inserindo item no carrinho');
params.catEntryId	= entitledItemJSON[i].catentry_id; //object JSON...
params.quantity		= quantity;
timer(params,i);
}


//***************************************************

var myvar;

function timer(params,i) 
{
	alert('qtditens = '+i)

	myvar = setInterval(function(){wc.service.invoke("AddOrderItem", params)},2000);
	
	if(i=='3'){
		alert('clearInterval('+myvar+')');
		clearInterval(myvar);
	}
}

Você verificou se não está dando nenhum erro?

Pode me explicar o que que você quer fazer?

Boa tarde Rafael,

realmente verifiquei nos logs do console do firebug e eles não apresentam nenhum erro para mim.

O que eu preciso é executar a chamada de um script dentro de um FOR, porem ele só executava na primeira posição a não ser que eu chamasse um alert dentro do FOR,
Imaginei que pudesse ser algo relacionado a timeOut, por isso só chamava a função uma única vez.
Sendo assim o que eu tentei fazer foi usar o setInterval() para que ele forçe a chamada do metodo em um range de milisegundos.
Funcionou porem ele fica chamando inúmeras vezes mesmo o FOR sendo limitado a 3 posições.


var params = [];
for(var i = 1; i < 3; i++) {
params.catEntryId	= entitledItemJSON[i].catentry_id; //object JSON...
params.quantity		= quantity;
timer(params,i);
}								}

function timer(params,i) 
{
	myvar = setInterval(function(){wc.service.invoke("AddOrderItem", params)},2000);
	
	if(i==2){
		clearInterval(myvar);
	}
}

O setTimeout não vai impedir o seu for de ser executado, ou seja, quando ele fizer o timeOut, ele não vai parar o seu for… Assim, o seu for faz 3 voltas mas o timeOut é executado uma única vez.

Por que que você precisa desse timeOut?

estou usando pq da forma como implementei abaixo ele só chama a função apenas umas vez, mesmo passando 3 vezes pelo FOR,

var params = []; for(var i = 1; i < 3; i++) { params.catEntryId = entitledItemJSON[i].catentry_id; //object JSON... params.quantity = quantity; wc.service.invoke("AddOrderItem", params); }

[b]ou seja:

i = 1 (executa a função wc.service.invoke(“AddOrderItem”, params))
i = 2 (não executa a função)

porem se eu coloco um alert(); ele chama invoca/chama a função[/b]

Isso é um ajax?
wc.service.invoke(“AddOrderItem”, params);

me parece que sim cara, porem não tenho acesso a ele!
esse esta sendo meu problema =/
preciso tentar resolver isso de alguma forma

Mas é uma péssima prática você fazer um timeout, pois se a conexão for mais lenta que o timeout, o timeout vai passar e o problema vai continuar.

Verifique se essa chamada não tem um callback. Faça assim no console do chrome:

parece que não temos nada cara, dê só uma olhada!

Eu não consegui ver esse log… Como que você fez isso?

Fala cara, pô valeu man,
consegui resolver passando uma function diretamente em uma váriavel e dando um setInterval() logo abaixo dela:
Deixo aqui a solução para caso alguem passe pelo mesmo problema!
Obrigado.

var params = [];
var varCounter = 1;
var varName = function(){

if(varCounter <= 2) { 
   params.catEntryId= entitledItemJSON[varCounter].catentry_id; //object JSON...
   params.quantity    = quantity;
   wc.service.invoke("AddOrderItem", params);
   varCounter++;
} else {
   clearInterval(myTimer);
}
}
   var myTimer = setInterval(varName, 500); //500 milissegundos