public function getPromise()
{
if (null === $this->promise) {
$this->promise = new Promise(function ($resolve, $reject, $cancel) {
$this->resolveCallback = $resolve;
$this->rejectCallback = $reject;
$this->cancelCallback = $cancel;
}, $this->canceller);
}
return $this->promise;
}