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