code: async def _watch(self, node, conn, names):
          "Watches the values at keys ``names``"
          for name in names:
              slot = self._determine_slot('WATCH', name)
              dist_node = self.connection_pool.get_node_by_slot(slot)
              if node.get('name') != dist_node['name']:
                  # raise error if commands in a transaction can not hash to same node
                  if len(node) > 0:
                      raise ClusterTransactionError("Keys in request don't hash to the same node")
          if self.explicit_transaction:
              raise RedisError('Cannot issue a WATCH after a MULTI')
          await conn.send_command('WATCH', *names)
          return await conn.read_response(ync def _watch(self, node, conn, names):
          "Watches the values at keys ``names``"
          for name in names:
              slot = self._determine_slot('WATCH', name)
              dist_node = self.connection_pool.get_node_by_slot(slot)
              if node.get('name') != dist_node['name']:
                  # raise error if commands in a transaction can not hash to same node
                  if len(node) > 0:
                      raise ClusterTransactionError("Keys in request don't hash to the same node")
          if self.explicit_transaction:
              raise RedisError('Cannot issue a WATCH after a MULTI')
          await conn.send_command('WATCH', *names)
          return await conn.read_response()
docs: Watches the values at keys ``names``