Chamadas ao servidor executadas antes de outras (GWT)

7 respostas
andre_guitar7

Pessoal, pra quem usa o gwt!

Gostaria de saber porque, se eu tenho uma sequência de código, algumas coisas são executadas antes e outras depois. Por exemplo, se eu tenho uma chamada remota ao servidor e logo após um loop qualquer na sequência do código. O loop é terminado de executar antes da chamada ao servidor. O mesmo acontece se tenho várias chamadas em sequencia ao servidor. Algumas vezes uma chamada que está em primeiro no código é executada depois de outras que estão após. Parece que são geradas threads diferentes pra cada chamada…

Se não entenderam o que eu disse, por favor, digam…

Obrigado!

7 Respostas

analyser

Pelo o que entendi a demora é na resposta certo?? se for isso pode ser que alguns servidores demorem mais para a resposta e por isso é feito outros primeiros, enquantos esperam o outro

bom não sei direito, mais talvez seja isso

andre_guitar7

Mas o certo não seria o código seguir uma sequencia? Se eu tenho:

public void fazIsso(){}
public void fazAquilo(){}

fazIsso();
fazAquilo();

Não deveria primeiro executar SEMPRE o fazIsso() em primeiro pra depois o fazAquilo()?

analyser

andre_guitar7:
Mas o certo não seria o código seguir uma sequencia? Se eu tenho:

public void fazIsso(){}
public void fazAquilo(){}

fazIsso();
fazAquilo();

Não deveria primeiro executar SEMPRE o fazIsso() em primeiro pra depois o fazAquilo()?

Sim é o certo, é muito estranho o que esta acontencendo.

Paulo_Alves

Penso que se deverá ao facto de as chamadas serem assincronas.

A thread que acabar primeiro lança a resposta primeiro…

andre_guitar7

No gwt tem como as chamadas não serem assincronas?

Mauricio_Linhares

Não, não tem. Se você quer usar AJAX sem fazer requisições assíncronas, deve estar com algum problema na idéia geral da sua aplicação.

V

Como as AsyncCallback são asincronas você nunca vai conseguir um fazIsso(){} fazAquilo(){}.
Coloca uma chamada ao servlet dentro da outra, isso pode trazer alguns problemas como o excesso de chamadas… mas como tudo depende da necessidade…

ServletUtil.getService().listTableAJoin(tabelaA.getId(), new MyAsyncCallback() { public void onSuccess(Object arg0) { List l = (List) arg0; for (Iterator it = l.iterator(); it.hasNext(); ) { Integer id = it.next(); ServletUtil.getService().getTabelaB(id, new MyAsyncCallback() { public void onSuccess(Object arg0) { this.tabelaB = (TabelaB)arg0; } } } } });

Criado 14 de junho de 2007
Ultima resposta 23 de jan. de 2008
Respostas 7
Participantes 5