promiseObservable.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { Observable } from 'babylonjs';
  2. export class PromiseObservable<T> extends Observable<T> {
  3. public notifyWithPromise(eventData: T, mask: number = -1, target?: any, currentTarget?: any): Promise<any> {
  4. let p = Promise.resolve();
  5. if (!this._observers.length) {
  6. return p;
  7. }
  8. let state = this['_eventState'];
  9. state.mask = mask;
  10. state.target = target;
  11. state.currentTarget = currentTarget;
  12. state.skipNextObservers = false;
  13. this._observers.forEach(obs => {
  14. if (state.skipNextObservers) {
  15. return;
  16. }
  17. if (obs.mask & mask) {
  18. if (obs.scope) {
  19. // TODO - I can add the variable from the last function here. Requires changing callback sig
  20. p = p.then(() => {
  21. return obs.callback.apply(obs.scope, [eventData, state]);
  22. });
  23. } else {
  24. p = p.then(() => {
  25. return obs.callback(eventData, state);
  26. });
  27. }
  28. }
  29. });
  30. return p;
  31. }
  32. }