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…
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
victorinox
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;
}
}
}
}
});