code: async def _wait(self, entity_type, entity_id, action, predicate=None):
          
          q = asyncio.Queue(loop=self._connector.loop)
  
          async def callback(delta, old, new, model):
              await q.put(delta.get_id())
  
          self.add_observer(callback, entity_type, action, entity_id, predicate)
          entity_id = await q.get()
          # object might not be in the entity_map if we were waiting for a
          # 'remove' action
          return self.state._live_entity_map(entity_type).get(entity_id)
docs: Block the calling routine until a given action has happened to the
          given entity
  
          :param entity_type: The entity's type.
          :param entity_id: The entity's id.
          :param action: the type of action (e.g., 'add', 'change', or 'remove')
          :param predicate: optional callable that must take as an
              argument a delta, and must return a boolean, indicating
              whether the delta contains the specific action we're looking
              for. For example, you might check to see whether a 'change'
              has a 'completed' status. See the _Observer class for details.