public function createDeferred()
{
$resolveCallback = $rejectCallback = $cancelCallback = null;
$promise = new Promise(function ($resolve, $reject, $cancel) use(&$resolveCallback, &$rejectCallback, &$cancelCallback) {
$resolveCallback = $resolve;
$rejectCallback = $reject;
$cancelCallback = $cancel;
});
return new DeferredBridge(['getPromise' => function () use($promise) {
return $promise;
}, 'resolve' => $resolveCallback, 'reject' => $rejectCallback, 'cancel' => $cancelCallback]);
}