Converts a Promise to an Observable sequence
public static toObservable ( React\Promise\CancellablePromiseInterface $promise ) : Rx\Observable\AnonymousObservable | ||
$promise | React\Promise\CancellablePromiseInterface | |
return | Rx\Observable\AnonymousObservable |
/** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @param callable $factory * @return \Rx\Observable\AnonymousObservable */ public static function toObservable(callable $factory) { $observableFactory = function () use($factory) { return Promise::toObservable($factory()); }; return Observable::defer($observableFactory); }
/** * @return ObservableInterface */ public function jobs() : ObservableInterface { return Promise::toObservable($this->getTransport()->request('builds/' . $this->id()))->flatMap(function ($response) { return Observable::fromArray($response['jobs']); })->map(function ($job) { return $this->getTransport()->getHydrator()->hydrate('Job', $job); }); }
public function commits() : ObservableInterface { return Promise::toObservable($this->getTransport()->request('repos/' . $this->slug() . '/builds'))->flatMap(function ($response) { return Observable::fromArray($response['commits']); })->map(function ($build) { return $this->getTransport()->getHydrator()->hydrate('Commit', $build); }); }
/** * @return ObservableInterface */ public function annotations() : ObservableInterface { return Promise::toObservable($this->getTransport()->request('jobs/' . $this->id() . '/annotations'))->flatMap(function ($response) { return Observable::fromArray($response['annotations']); })->map(function ($annotation) { return $this->getTransport()->getHydrator()->hydrate('Annotation', $annotation); }); }
/** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @param callable $factory * @return \Rx\Observable\AnonymousObservable */ public static function toObservable($factory) { if (!is_callable($factory)) { throw new InvalidArgumentException('Factory should be a callable.'); } $observableFactory = function () use($factory) { return Promise::toObservable($factory()); }; return BaseObservable::defer($observableFactory); }
/** * @test * */ public function from_promise_failure() { $p = Promise::rejected(new Exception('error')); $source = Promise::toObservable($p); $source->subscribe(new CallbackObserver(function ($x) { $this->assertFalse(true); }, function ($error) { $this->assertEquals($error, new Exception('error')); }, function () { $this->assertFalse(true); })); }
<?php require_once __DIR__ . '/../bootstrap.php'; $p = \Rx\React\Promise::resolved(42); $source = \Rx\React\Promise::toObservable($p); $subscription = $source->subscribe($stdoutObserver); //Next value: 42 //Complete! // Create a promise which rejects with an error $p = \Rx\React\Promise::rejected(new Exception('because')); $source2 = \Rx\React\Promise::toObservable($p); $subscription = $source2->subscribe($createStdoutObserver()); //Exception: because
/** * @return ObservableInterface */ public function broadcasts() : ObservableInterface { return Promise::toObservable($this->transport->request('broadcasts'))->flatMap(function ($response) { return Observable::fromArray($response['broadcasts']); })->map(function ($broadcast) { return $this->getTransport()->getHydrator()->hydrate('Broadcast', $broadcast); }); }
/** * @test */ public function observable_dispose_after_complete() { $canceled = false; $deferred = new Deferred(function () use(&$canceled) { $canceled = true; }); $o = Promise::toObservable($deferred->promise()); $this->scheduler->schedule(function () use($deferred) { $deferred->resolve(1); }, 200); $results = new MockObserver($this->scheduler); $s = $o->subscribe($results, $this->scheduler); $this->scheduler->schedule(function () use($s) { $s->dispose(); }, 250); $this->scheduler->start(); $this->assertMessages([onNext(200, 1), onCompleted(200)], $results->getMessages()); $this->assertFalse($canceled); }
/** * @return ObservableInterface */ public function caches() : ObservableInterface { return Promise::toObservable($this->getTransport()->request('repos/' . $this->slug() . '/caches'))->flatMap(function ($response) { return Observable::fromArray($response['caches']); })->map(function ($cache) { return $this->getTransport()->getHydrator()->hydrate('Cache', $cache); }); }