Eventbus事件顺序

Ste*_*fan 4 events gwt event-bus

早上,

我正在使用SimpleEvent总线将数据从我的集中数据恢复器发送到Widgets.这工作得非常好,我从服务器获得一组新数据,RPC调用的成功方法将它放在Eventbus上,每个小部件查看数据是否适用于它,如果是,则"显示"它,如果没有,它什么都不做.每个请求只有一个数据集,小部件不依赖于已发送的其他数据.

现在我有一个Tree小部件.创建树的子节点也会抛出此数据集,并且此子节点将自身注册到Eventbus以恢复其子节点的数据.数据应在急速接收时(出于性能原因),因此我将获得多个数据集,这些数据集在"同一时间"(在for循环中)放在Eventbus上.我只控制它们放在那里的顺序(首先是根,然后是第一个孩子的数据......).Eventbus现在如何进行活动?

  • 他是否等到第一个事件完成,所以树的第一个孩子已经完成创建并将自己注册到Eventbus,以恢复数据以创建它的孩子.
  • 他是否同时处理它们,因此小部件甚至没有注册到Eventbus.
  • 他混淆了订单吗?!?!

目前的解决方案:

  1. 我能想到的最好的解决方案是在前一个完成后只在Eventbus上放置新事件.但是我找到了一种方法,或者它是Eventbus的标准行为.
  2. 当窗口小部件处理事件时,触发处理完成事件的请求.Yucks ...这会导致很多额外的代码并导致大问题,当数据被放在不属于任何小部件的Eventbus上时....
  3. 注册一个静态变量,当处理请求时,该变量设置为true,并且Eventbus等待很长时间,直到他将下一个请求放在Eventbus上(Quiet类似于两个,但编码风格和编码风格相同)
  4. 所有事件都由根树元素处理,根元素元素将它们向上发送到相应的子元素.

您更喜欢哪种解决方案?为什么?

此致,斯特凡

PS:我最喜欢的答案是1.是Eventbus的标准行为^^ PPS:解决方案也应该在介绍Webworkers时工作.

Tho*_*yer 7

EventBus#fireEvent是同步的.这是设计的.您可以将事件传递给总线,让处理程序可以修改它,当执行返回到您的方法时,您可以检查事件; 这用于PlaceChangeRequestEvent及其setMessage例如.

仅供参考,如果处理程序抛出异常,则不会阻止执行其他处理程序.的fireEvent意愿,然后包裹异常(复数;多个处理程序可以抛出)在UmbrellaException.