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!
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
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()?
[quote=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()?[/quote]
Sim é o certo, é muito estranho o que esta acontencendo.
Penso que se deverá ao facto de as chamadas serem assincronas.
A thread que acabar primeiro lança a resposta primeiro…
No gwt tem como as chamadas não serem assincronas?
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.
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;
}
}
}
}
});