2017-02-08 1 views
0

내가 요청에서 응답 변수를 저장할 필요가 areaRequest이가 작동하는 RequestContext하지만 나는 그것을 저장하고저장 응답 변수 - GWT

Long temp; 
    areaRequest.countByCurrentInstitution().fire(new Receiver<Long>() { 
     @Override 
     public void onSuccess(Long response) { 
      temp = response; 

     }   
    }); 

답변

-1

음, GWT와 많은 시간을 내가 여기에있는 해결책은 중첩 된 비동기 호출을 만들 수 있었다 일 후 .

areaRequest.countByCurrentInstitution().fire(new Receiver<Long>() { 
@Override 
public void onSuccess(Long response) { 
// Here I pass the value from the first request 
    anotherRequest.anotherFunction(response).fire(new Receiver<Long>(){ 
     @Override 
     public void onSuccess(Long new_response){ // Long again it could be anything it depends of your function 
      doWhateverYouWant(new_response) 
     } 
    }); 
}   

});

+0

나는 당신이 필요 이상으로 힘들어하고 있다고 생각합니다. Walen이 마지막으로 대답 해주었습니다. – Knarf

+0

그 대답은 작동하지 않습니다. 비동기 응답에서 변수를 저장할 수 없습니다. 따라서 이렇게하는 방법은 두 번째 호출에 필요한 변수를 반환하는 함수를 먼저 호출하는 것입니다. 나는 더 열심히하지 않는다. 내 시야에서 이것은 가장 간단한 해결책이다. –

1

당신이 할 수있는 범위에서 사용할 수 없습니다 Receiver 내부의 최종 변수가 아닌 변수를 사용하지 마십시오.

final Long[] temp = {-1}; 
areaRequest.countByCurrentInstitution().fire(new Receiver<Long>() { 
    @Override 
    public void onSuccess(Long response) { 
     temp[0] = response; 
    }   
}); 
doSomethingWith(temp[0]); 

을하지만 당신이 무엇을 원하는 보통이 아니다 :

신속하고 더러운 변화

는 범위의 문제가 될 것이다 방지 할 수 있습니다. countByCurrentInstitution()이 비동기 호출이기 때문에 doSomethingWith()을 호출 할 때까지 temp[0]은 여전히 ​​ -1이 될 것입니다. async 메서드가 다른 스레드에서 계속 실행 중이기 때문입니다.
간단한 스레드 인 Thread.sleep() 또는 매우 긴 루프를 사용하여 주 스레드를 조금만 기다릴 수는 있지만, 다시 말하면 빠른 해킹 일 뿐이며 오류가 발생하기 쉽습니다 (호출이 오래 걸리면 어떻게 될까요?).

가장 좋은 방법은 Long temp 도랑 그냥 onSuccess() 방법 내부 코드를 이동하는 것입니다 :

areaRequest.countByCurrentInstitution().fire(new Receiver<Long>() { 
    @Override 
    public void onSuccess(Long response) { 
     doSomethingWith(response); 
    }   
}); 
+0

이것은 작동하지 않습니다. 요청 범위 이후의 임시 변수는 항상 -1입니다. 서버에서 값을 가져 오는 다른 방법이 있습니까? –

+0

나는 이미 그것에 대해 경고했다. 첫 번째 예제는 범위 문제를 피하는 더러운 방법이다. 실제로이 값을 사용하려면 두 번째 예제에서 보여주는 것처럼 onSuccess() 메서드 내에서 논리를 이동해야합니다. – walen

+0

내가이 작업을 수행해야하는 이유는 해당 함수에서 수정 된 값을 반환하지만 onSuccess() 내부에서 반환을 사용할 수 없기 때문입니다. –