code: def _process_data(self, obj):
          
          assert len(self._waiters) > 0, (type(obj), obj)
          waiter, encoding, cb = self._waiters.popleft()
          if isinstance(obj, RedisError):
              if isinstance(obj, ReplyError):
                  if obj.args[0].startswith('READONLY'):
                      obj = ReadOnlyError(obj.args[0])
              _set_exception(waiter, obj)
              if self._in_transaction is not None:
                  self._transaction_error = obj
          else:
              if encoding is not None:
                  try:
                      obj = decode(obj, encoding)
                  except Exception as exc:
                      _set_exception(waiter, exc)
                      return
              if cb is not None:
                  try:
                      obj = cb(obj)
                  except Exception as exc:
                      _set_exception(waiter, exc)
                      return
              _set_result(waiter, obj)
              if self._in_transaction is not None:
                  self._in_transaction.append((encoding, cb))
docs: Processes command results.