qx.event.type.Event.addPromise()的作用是什么?

时间:2019-05-01 08:36:32

标签: qooxdoo

我正在浏览apiviewer,发现在类qx.event.type.Event中有一个方法addPromise(promise)。我在Github的qooxdoo组织中搜索了用例,但找不到任何用例。有人可以提供该方法的使用示例吗?

1 个答案:

答案 0 :(得分:2)

这是因为收集承诺通常依赖于返回承诺的函数,但是事件触发API的返回值是布尔值(参见MEvent.js中的fireEventfireDataEvent

在其他情况下,我们添加了带有后缀Async的新函数(例如,名为“ myProperty”的属性可以具有setMyPropertyAsync),这使我们可以从代码中分离基于承诺的路径,旧的无承诺的同步代码-因此我们能够引入新功能,同时保持严格的向后兼容性(否则这些功能将需要对API进行重大更改)

但是对于事件而言这是不可能的,因为fireEvent / fireDataEvent如此普遍并且从根本上是同步的,因此它们必须继续返回布尔值。

我们要交换一个事实,即事件通常以异步方式使用,并且fireEvent的布尔返回值仅用于确定事件是否是preventDefault()的事实或不。这就要求事件不能异步preventDefaulted()(嗯,实际上它们可以,但是可以想象,这种情况并非100%可靠)。

但是,由于返回值不是promise并且不能被链接,因此我们必须提供一种链接它的机制-addPromise方法允许调用者将promise添加到链中,然后框架将抓取稍后通过致电event.promise()-参见qx.event.Registration.fireNonBubblingEventAsync来实现这些承诺。