从Request - GWT保存响应变量

时间:2017-02-08 21:37:47

标签: java gwt

我需要从请求中保存响应变量,areaRequest是一个RequestContext,但是我无法保存并将其用于范围

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

        }           
    });

2 个答案:

答案 0 :(得分:1)

您不能在接收器内使用外部非最终变量。

为避免范围问题,快速而肮脏的变化将是:

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

但这通常不是你想要做的。因为(if)countByCurrentInstitution()是异步调用,所以temp[0]在调用-1时仍然是doSomethingWith(),因为异步方法仍然在另一个线程中运行。登记/> 您可以通过使用简单的Thread.sleep()或(yikes!)一个非常长的循环使主线程等待一下,但是,这只是一个快速的黑客并且容易出错(如果调用花费的时间比这长? )。

最好的选择是放弃Long temp,只需在onSuccess()方法中移动代码:

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

答案 1 :(得分:-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)
        }
    });
}           

});