Recently I made an basic port of the JavaScript Promise
construct to Python. Here's the basic code:
class Promise:
def __init__(self, fn):
self.value = None
self.errors = []
self._state = "unfullfilled"
def resolve(val):
if self._state == "settled":
return
self.value = val
self._state = "settled"
def reject(err):
if self._state == "settled":
return
self.errors.append(err)
self._state = "settled"
fn(resolve, reject)
def catch(self, fn):
if self.errors:
for i in self.errors:
fn(i)
self.errors.remove(i)
return self
def then(self, fn):
if not self.errors:
fn(self.value)
return self
@staticmethod
def resolve(val):
def g(resolve, reject):
resolve(val)
return Promise(g)
@staticmethod
def reject(val):
def g(resolve, reject):
reject(val)
return Promise(g)
What could I improve in this code? Besides that, are there any bugs in this code?