/** * 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); }
/** * Converts a Promise to an Observable sequence * * @param \React\Promise\PromiseInterface $promise * @return \Rx\Observable\AnonymousObservable */ public static function toObservable(PromiseInterface $promise) { return BaseObservable::defer(function () use($promise) { $subject = new AsyncSubject(); $promise->then(function ($value) use($subject) { $subject->onNext($value); $subject->onCompleted(); }, [$subject, "onError"]); return $subject; }); }
/** * @test */ public function defer_throw() { $invoked = 0; $results = $this->scheduler->startWithCreate(function () use(&$invoked) { return BaseObservable::defer(function () use(&$invoked) { $invoked++; throw new \Exception('error'); }); }); $this->assertMessages([onError(200, new \Exception('error'))], $results->getMessages()); $this->assertEquals(1, $invoked); }
<?php require_once __DIR__ . '/../bootstrap.php'; $source = \Rx\Observable\BaseObservable::defer(function () { return \Rx\Observable\BaseObservable::just(42); }); $subscription = $source->subscribe($stdoutObserver); //Next value: 42 //Complete!