/ client_code / utils / _deferred.py
_deferred.py
 1  # SPDX-License-Identifier: MIT
 2  #
 3  # Copyright (c) 2021 The Anvil Extras project team members listed at
 4  # https://github.com/anvilistas/anvil-extras/graphs/contributors
 5  #
 6  # This software is published at https://github.com/anvilistas/anvil-extras
 7  
 8  from anvil.js import window as _window
 9  
10  __version__ = "3.1.0"
11  
12  
13  class Deferred:
14      def init_promise(self, resolve, reject):
15          self._resolve = resolve
16          if not self._pending:
17              resolve()
18  
19      def __init__(self):
20          self._promise = None
21          self._resolve = None
22          self._pending = True
23  
24      @property
25      def promise(self):
26          if self._promise is None:
27              self._promise = _window.Promise(self.init_promise)
28          return self._promise
29  
30      def resolve(self, value=None):
31          self._pending = False
32          if self._resolve is not None:
33              self._resolve(value)