例如,让我们检查下面的代码
private void loadUserFromServer() {
dispatchAsync.execute(new FindLoggedUserAction(),
new AsyncCallback<FindLoggerUserResult>() {
@Override
public void onFailure(Throwable caught) {
//do something
}
@Override
public void onSuccess(BuscarUsuarioLogadoResult result) {
//dosomething with user
result.getUser();
}
operationTwo();
}
我的问题是,我必须执行 operationTwo(); 在 dipatcher 的一些结果之后(成功或失败)。
这只是一个示例,假设我不能将 operationTwo() 放入 onSucess 或 onFailure()
我真正的问题
该用户必须登录的演示者的我的 GateKeeper。
private UserDTO user;
@Override
public boolean canReveal() {
if(getUser() == null){
ShowMsgEvent.fire(eventBus,"Must Login first", AlertType.ERROR);
return false;
}
return true;
}
}
public UserDTO getUser()
{
if(user == null)
{
//call server
loadUserFromServer();
}
return user;
}
private void loadUsuarioFromServer() {
dispatchAsync.execute(new BuscarUsuarioLogadoAction()
,new AsyncCallback<BuscarUsuarioLogadoResult>() {
@Override
public void onFailure(Throwable caught) {
//something
}
@Override
public void onSuccess(BuscarUsuarioLogadoResult result) {
if(!(result.getDto().equals(user)))
{
setUsuario(result.getDto(), false); //Set user UserDTO user
//event for update Presenter Login/Logout
// and Label with username
fireUserUpdateEvents();
}
else
{
setUsuario(result.getDto(), false);
}
}
});
如您所见,当调用具有该 Gatekeeper 的 Presenter 并且用户为 null 时,会调用 getUser(),但是当 dispatch 执行时,该方法不会等到 Sucess 或 Failure 返回
结果:getUser() 返回 null。
在 dispatch 成功后,getUser() 返回一个 DTO。但是,如您所见,canReveal() 已经返回 false。