Skip to content

Commit

Permalink
Added Scheduler to Promise::fromObservable() (#99)
Browse files Browse the repository at this point in the history
* added Scheduler to Promise::fromObservable(), resolves #40

* fix docbock
  • Loading branch information
martinsik authored and mbonneau committed Dec 9, 2016
1 parent b93d296 commit de88548
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
9 changes: 6 additions & 3 deletions lib/Rx/React/Promise.php
Expand Up @@ -8,6 +8,7 @@
use Rx\Observable;
use Rx\Observable\AnonymousObservable;
use Rx\Observer\CallbackObserver;
use Rx\SchedulerInterface;
use Rx\Subject\AsyncSubject;
use React\Promise\Deferred;

Expand Down Expand Up @@ -38,10 +39,12 @@ public static function rejected($exception)
/**
* Converts an existing observable sequence to React Promise
*
* @param PromisorInterface|null $deferred
* @param ObservableInterface $observable
* @param \React\Promise\PromisorInterface|null $deferred
* @param SchedulerInterface|null $scheduler
* @return \React\Promise\Promise
*/
public static function fromObservable(ObservableInterface $observable, Deferred $deferred = null)
public static function fromObservable(ObservableInterface $observable, Deferred $deferred = null, $scheduler = null)
{
$d = $deferred ?: new Deferred();
$value = null;
Expand All @@ -56,7 +59,7 @@ function ($error) use ($d) {
function () use ($d, &$value) {
$d->resolve($value);
}
));
), $scheduler);

return $d->promise();
}
Expand Down
27 changes: 27 additions & 0 deletions test/Rx/Functional/React/PromiseFromObservableTest.php
Expand Up @@ -35,6 +35,33 @@ function () {

}

/**
* @test
*
*/
public function promise_success_scheduler()
{

$scheduler = $this->createTestScheduler();
$observer = $scheduler->createObserver();

$scheduler->scheduleAbsoluteWithState(null, 200, function($scheduler) use ($observer) {
$source = Observable::just(42)->delay(100);
$promise = Promise::fromObservable($source, null, $scheduler);

$promise->then(function($value) use ($observer) {
$observer->onNext($value);
});
});

$scheduler->start();

$this->assertMessages([
onNext(301, 42),
], $observer->getMessages());

}

/**
* @test
*
Expand Down

0 comments on commit de88548

Please sign in to comment.