如何处理bean需要服务器调用作为其初始化的一部分的情况

时间:2014-05-08 11:32:58

标签: java gwt requestfactory gwtp gin

我有下面的构造函数......

@Inject
public EditorPresenter(final EventBus eventBus, final MyView view, final Provider<DataProvider> provider) {

    DataProvider provider = provider.get();
    provider.getInitData().fire(new Receiver<List<DataElement>>() {

        @Override
        public void onSuccess(List<DataElement> response) {
            LOG.info("seting feed types to {}", response);
            EditorPresenter.this.data = response;
        }
    });
}

此构造函数将类字段 data 设置为请求工厂调用中返回的值。

问题是这些数据需要调用服务器,因此是异步的。

当构造函数返回时,需要设置此字段,因为其他对象/ bean依赖于它(我有后续错误依赖于数据被初始化)。

使用Gin处理此场景的最有效和最轻量级方法是什么?

我希望GIN内置一些可以优雅地处理这种情况的内容。

3 个答案:

答案 0 :(得分:0)

GQuery Promise解决了这种情况:

类似的东西:

public void yourMethod(....) {
  ....

  getDataFromServer(provider).then(processData)
  .done(new Function() { public void f(){
    continueYourFlow();
  }})
  .fail(new Function() { public void f(){
    handleError();
  }});
}

  protected Promise getDataFromServer(final Provider<DataProvider> provider) {
    return new PromiseRF(provider.getInitData());
  }

  Function proccessData = new Function() { public void f() {
    List<DataElement> data = arguments(0);
    //do something with your data
  }};

应该有效。如果没有,请问!

答案 1 :(得分:0)

你的方法有问题。您不应该等待所有应用程序等待服务器。

如果我理解,在初始化客户端之前需要来自服务器的一些数据。也许你应该将它们放在主页中?或者将演示者的初始化移动到其他方法并通过事件执行这些方法。

答案 2 :(得分:0)

最好不要初始化其他应用。我不确定你的初始化是如何布局的,但在注入EditorPresenter类的实例后我不会再初始化了。

当您的onSuccess呼叫被触发时,触发一个事件或调用一个方法,该方法将从您停止的位置开始。如果你认为它会有一段时间你可以抛出等待屏幕或其他一些。