protected function chainAdd($method, $arguments = [])
    {
        $this->chain[] = [
            'method' => $method,
            'arguments' => $arguments,
        ];
        if ($this->promise !== null) {
            $chain = $this->chain;
            $this->chain = [];
            static::chainApply($this->promise, $chain);
            return $this->promise;
        }
        return $this;
    }