클래스를 설계했습니다. AsyncCalllback을 구현하는 AsyncClass라고 할 수 있습니다. 두 개의 전역 변수 boolean flag
및 Object val
이 있습니다. 그리고 생성자는 다음과 같다 :GWT Asyncus 콜백을 사용하여 동기/차단 호출 만들기
public void onSuccess(Object x){
this.flag=true;
this.val=x;
}
이제 제가 원하는 것은이 여기에서 반환 값을 얻을 수 있습니다 :
AsyncClass()
{
this.flag=false;
this.val=null;
}
및 onSuccess()
기능은 다음과 같이 정의된다. 그래서 내가 전화하기 :
AsyncClass callback=new AsyncClass();
service.getResult(createRequestObject(),callback)
을하고 난 플래그가 true 차례를 기다리고 계속 while 루프를 실행합니다.
while(!callback.flag);
그러나 무한 루프에 걸릴 수 있습니다. 왜 이런 일이 발생합니까 ??
AsyncCallback의 onFailure 및 onSuccess 메소드를 사용해야합니다.GWT는 이벤트 구동 방식이므로 호출이 성공하거나 실패하고 그 중 하나가 호출됩니다. 그것을 전화로 생각하고 잊어 버린 다음, 이벤트가 기다리던 지 또는 실패했는지를 기다리십시오. – WLGfx
정확히 어떤 일을하고 계십니까? onSuccess 메서드는 플래그를 켜기로되어 있으므로 while 루프 조건이 false로 충족되어 종료됩니다. 그러나 while 루프는 영원히 계속됩니다. 콜백 객체가 현재 스레드에 의해 유지되고 릴리스 될 때까지 아무 일도 일어나지 않기 때문입니까? –
맞음 - 단 하나의 스레드 만 있으므로 서버 호출을 시작한 코드가 브라우저로 제어를 반환 할 때까지 onSuccess를 실행하려고 시도 할 방법이 없습니다. –