public function spread(callable $onFulfilled = null, callable $onRejected = null, callable $onCancel = null) { return $this->then(null, null, function ($reasons) use($onCancel) { return call_user_func_array($onCancel, (array) $reasons); }); }