code: public function run(){
          $handlers_registered = $this->handlers;
          $last_handler = array_pop($handlers_registered);
          $last = function($data) use ($last_handler){
              if($last_handler instanceof Closure){
                  return call_user_func($last_handler,$data);
              }elseif (!is_object($last_handler)){
                  $last_handler = $this->context->produce($last_handler);
              }
              $args = [$data];
              return call_user_func_array([$last_handler,$this->action],$args);
          };
          $handlers = array_reverse($handlers_registered);
          return call_user_func(array_reduce($handlers,$this->walk(),$last),$this->req);
      }
docs: when use run/runWith,handler should be like "func($data,$next)" and return "$next($data)"