class AsyncApiCommunicator(object):
    def __init__(self, inner):
        self.inner = inner

    def call(self, *args, **kwargs):
        tag = self.inner.send(*args, **kwargs)
        return ResponsePromise(self.inner, tag)

class ResponsePromise(object):
    def __init__(self, receiver, tag):
        self.receiver = receiver
        self.tag = tag

    def get(self):
        return self.receiver.receive(self.tag)

class AsyncApiCommunicator(object):
    def __init__(self, inner):
        self.inner = inner

    def call(self, *args, **kwargs):
        tag = self.inner.send(*args, **kwargs)
        return ResponsePromise(self.inner, tag)

class ResponsePromise(object):
    def __init__(self, receiver, tag):
        self.receiver = receiver
        self.tag = tag
        self.response = None

    def get(self):
        if self.response is None:
            self.response = self.receiver.receive(self.tag)
        return self.response

Allow to run get on promise multiple times.
Allow to run get on promise multiple times.

  class AsyncApiCommunicator(object):
      def __init__(self, inner):
          self.inner = inner
  
      def call(self, *args, **kwargs):
          tag = self.inner.send(*args, **kwargs)
          return ResponsePromise(self.inner, tag)
  
  class ResponsePromise(object):
      def __init__(self, receiver, tag):
          self.receiver = receiver
          self.tag = tag
+         self.response = None
  
      def get(self):
+         if self.response is None:
-         return self.receiver.receive(self.tag)
+             self.response = self.receiver.receive(self.tag)
+         return self.response
  
Allow to run get on promise multiple times.
## Code Before:
class AsyncApiCommunicator(object):
    def __init__(self, inner):
        self.inner = inner

    def call(self, *args, **kwargs):
        tag = self.inner.send(*args, **kwargs)
        return ResponsePromise(self.inner, tag)

class ResponsePromise(object):
    def __init__(self, receiver, tag):
        self.receiver = receiver
        self.tag = tag

    def get(self):
        return self.receiver.receive(self.tag)

## Instruction:
Allow to run get on promise multiple times.
## Code After:
class AsyncApiCommunicator(object):
    def __init__(self, inner):
        self.inner = inner

    def call(self, *args, **kwargs):
        tag = self.inner.send(*args, **kwargs)
        return ResponsePromise(self.inner, tag)

class ResponsePromise(object):
    def __init__(self, receiver, tag):
        self.receiver = receiver
        self.tag = tag
        self.response = None

    def get(self):
        if self.response is None:
            self.response = self.receiver.receive(self.tag)
        return self.response
