我正在浏览apiviewer,发现在类qx.event.type.Event中有一个方法addPromise(promise)。我在Github的qooxdoo组织中搜索了用例,但找不到任何用例。有人可以提供该方法的使用示例吗?
答案 0 :(得分:2)
这是因为收集承诺通常依赖于返回承诺的函数,但是事件触发API的返回值是布尔值(参见MEvent.js中的fireEvent
和fireDataEvent
在其他情况下,我们添加了带有后缀Async
的新函数(例如,名为“ myProperty”的属性可以具有setMyPropertyAsync
),这使我们可以从代码中分离基于承诺的路径,旧的无承诺的同步代码-因此我们能够引入新功能,同时保持严格的向后兼容性(否则这些功能将需要对API进行重大更改)
但是对于事件而言这是不可能的,因为fireEvent
/ fireDataEvent
如此普遍并且从根本上是同步的,因此它们必须继续返回布尔值。
我们要交换一个事实,即事件通常以异步方式使用,并且fireEvent
的布尔返回值仅用于确定事件是否是preventDefault()
的事实或不。这就要求事件不能异步preventDefaulted()
(嗯,实际上它们可以,但是可以想象,这种情况并非100%可靠)。
但是,由于返回值不是promise并且不能被链接,因此我们必须提供一种链接它的机制-addPromise
方法允许调用者将promise添加到链中,然后框架将抓取稍后通过致电event.promise()
-参见qx.event.Registration.fireNonBubblingEventAsync来实现这些承诺。