/** * 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); }); }
/** * @test */ public function from_promise_success() { $source = PromiseFactory::toObservable(function () { return Promise::resolved(42); }); $results = $this->scheduler->startWithCreate(function () use($source) { return $source; }); $this->assertMessages(array(onNext(200, 42), onCompleted(200)), $results->getMessages()); }
/** * 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 promise_failure() { $source = new Subject(); $source->onError(new Exception("some error")); $promise = Promise::fromObservable($source); $promise->then(function ($value) { $this->assertTrue(false); }, function ($error) { $this->assertEquals($error, new Exception("some error")); }); }
/** * @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); })); }
/** * @test */ public function from_promise_reject() { $error = new Exception("Test exception"); $source = PromiseFactory::toObservable(function () use($error) { return Promise::rejected($error); }); $theException = null; $source->subscribeCallback([$this, 'fail'], function ($err) use(&$theException) { $theException = $err; }, [$this, 'fail'], $this->scheduler); $this->scheduler->start(); $this->assertTrue($theException instanceof Exception); $this->assertSame($error, $theException); }
<?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); }); }
<?php require_once __DIR__ . '/../bootstrap.php'; /* Using a promise */ $source = \Rx\React\PromiseFactory::toObservable(function () { return \Rx\React\Promise::resolved(42); }); $subscription = $source->subscribe($createStdoutObserver()); //Next value: 42 //Complete!
/** * @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); }
<?php require_once __DIR__ . '/../bootstrap.php'; // With React Promise $source = \Rx\Observable\BaseObservable::just(42); $promise = \Rx\React\Promise::fromObservable($source); $promise->then(function ($value) { echo "Value {$value}\n"; }); //Value 42
/** * @return array */ public function broadcasts() : array { return await(Promise::fromObservable($this->client->broadcasts()->toArray()), $this->transport->getLoop()); }
/** * @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); }); }