Для чего используется qx.event.type.Event.addPromise ()? - PullRequest
1 голос
/ 01 мая 2019

Я просматривал apiviewer и заметил, что есть метод addPromise (обещание) в классе qx.event.type.Event.Я искал варианты использования в организации qooxdoo в Github, но не смог их найти.Может ли кто-нибудь привести пример использования этого метода?

1 Ответ

2 голосов
/ 02 мая 2019

Это потому, что сбор обещаний обычно основан на функции, возвращающей обещание, но API запуска событий запекается с возвращаемым значением, являющимся логическим значением (см. fireEvent и fireDataEvent в MEvent.js .

В других обстоятельствах мы добавили новую функцию с суффиксом Async (например, свойство с именем "myProperty" может иметь setMyPropertyAsync), которое позволяет нам отделить основанный на обещаниях путь через код от старого не обещание, синхронный код - так что мы можем вводить новые функции, сохраняя при этом строгую обратную совместимость (функции, которые в противном случае потребовали бы критического изменения API)

Но это невозможно с событиями, потому что fireEvent / fireDataEvent настолько вездесущи и принципиально синхронны, что они должны продолжать возвращать логическое значение.

Мы торгуем тем фактом, что события обычно используются асинхронно, а также тем фактом, что логическое возвращаемое значение fireEvent используется только для определения того, было ли событие preventDefault() вызвано или нет. Это делает необходимым, чтобы события не могли быть preventDefaulted() асинхронными (ну, они, вероятно, могут в действительности, но, возможно, может быть ситуация, когда это не на 100% надежно).

Однако, поскольку возвращаемое значение не является обещанием и не может быть объединено в цепочку, мы должны предоставить механизм для его цепочки - метод addPromise позволяет вызывающим абонентам добавлять обещания в цепочку, и тогда среда будет захватывать эти обещания позже, позвонив event.promise() - см. qx.event.Registration.fireNonBubblingEventAsync .

...