immediate.py 663 B

123456789101112131415161718192021222324252627
  1. from threading import Event
  2. if False:
  3. from ..promise import Promise
  4. from typing import Callable, Any, Optional # flake8: noqa
  5. class ImmediateScheduler(object):
  6. def call(self, fn):
  7. # type: (Callable) -> None
  8. try:
  9. fn()
  10. except:
  11. pass
  12. def wait(self, promise, timeout=None):
  13. # type: (Promise, Optional[float]) -> None
  14. e = Event()
  15. def on_resolve_or_reject(_):
  16. # type: (Any) -> None
  17. e.set()
  18. promise._then(on_resolve_or_reject, on_resolve_or_reject)
  19. waited = e.wait(timeout)
  20. if not waited:
  21. raise Exception("Timeout")