我有下面的构造函数......
@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内置一些可以优雅地处理这种情况的内容。
答案 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呼叫被触发时,触发一个事件或调用一个方法,该方法将从您停止的位置开始。如果你认为它会有一段时间你可以抛出等待屏幕或其他一些。