public static function fromObservable(ObservableInterface $observable, Deferred $deferred = null)
{
$d = $deferred ?: new Deferred();
$value = null;
$observable->subscribe(new CallbackObserver(function ($v) use(&$value) {
$value = $v;
}, function ($error) use($d) {
$d->reject($error);
}, function () use($d, &$value) {
$d->resolve($value);
}));
return $d->promise();
}