Skip to content

Commit

Permalink
Forward compatibility with upcoming Promise v3
Browse files Browse the repository at this point in the history
  • Loading branch information
clue committed Jun 26, 2022
1 parent cfd52ac commit 57859f0
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 13 deletions.
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@
"require": {
"php": ">=8.1",
"react/event-loop": "^1.2",
"react/promise": "^2.8 || ^1.2.1"
"react/promise": "^3.0 || ^2.8 || ^1.2.1"
},
"require-dev": {
"phpunit/phpunit": "^9.3",
"react/promise-timer": "^1.8"
"react/promise-timer": "^1.9"
},
"autoload": {
"psr-4": {
Expand Down
16 changes: 7 additions & 9 deletions src/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

namespace React\Async;

use React\EventLoop\Loop;
use React\Promise\CancellablePromiseInterface;
use React\Promise\Deferred;
use React\Promise\Promise;
use React\Promise\PromiseInterface;
Expand Down Expand Up @@ -199,7 +197,7 @@ function async(callable $function): callable
}, function () use (&$fiber): void {
FiberMap::cancel($fiber);
$promise = FiberMap::getPromise($fiber);
if ($promise instanceof CancellablePromiseInterface) {
if ($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) {
$promise->cancel();
}
});
Expand Down Expand Up @@ -277,7 +275,7 @@ function await(PromiseInterface $promise): mixed
$rejectedThrowable = null;
$lowLevelFiber = \Fiber::getCurrent();

if ($lowLevelFiber !== null && FiberMap::isCancelled($lowLevelFiber) && $promise instanceof CancellablePromiseInterface) {
if ($lowLevelFiber !== null && FiberMap::isCancelled($lowLevelFiber) && $promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) {
$promise->cancel();
}

Expand Down Expand Up @@ -486,7 +484,7 @@ function coroutine(callable $function, mixed ...$args): PromiseInterface
$promise = null;
$deferred = new Deferred(function () use (&$promise) {
// cancel pending promise(s) as long as generator function keeps yielding
while ($promise instanceof CancellablePromiseInterface) {
while ($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) {
$temp = $promise;
$promise = null;
$temp->cancel();
Expand Down Expand Up @@ -541,7 +539,7 @@ function parallel(array $tasks): PromiseInterface
$pending = [];
$deferred = new Deferred(function () use (&$pending) {
foreach ($pending as $promise) {
if ($promise instanceof CancellablePromiseInterface) {
if ($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) {
$promise->cancel();
}
}
Expand All @@ -560,7 +558,7 @@ function parallel(array $tasks): PromiseInterface
$deferred->reject($error);

foreach ($pending as $promise) {
if ($promise instanceof CancellablePromiseInterface) {
if ($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) {
$promise->cancel();
}
}
Expand Down Expand Up @@ -598,7 +596,7 @@ function series(array $tasks): PromiseInterface
{
$pending = null;
$deferred = new Deferred(function () use (&$pending) {
if ($pending instanceof CancellablePromiseInterface) {
if ($pending instanceof PromiseInterface && \method_exists($pending, 'cancel')) {
$pending->cancel();
}
$pending = null;
Expand Down Expand Up @@ -638,7 +636,7 @@ function waterfall(array $tasks): PromiseInterface
{
$pending = null;
$deferred = new Deferred(function () use (&$pending) {
if ($pending instanceof CancellablePromiseInterface) {
if ($pending instanceof PromiseInterface && \method_exists($pending, 'cancel')) {
$pending->cancel();
}
$pending = null;
Expand Down
2 changes: 1 addition & 1 deletion tests/SeriesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public function testSeriesWillCancelFirstPendingPromiseWhenCallingCancelOnResult
$tasks = array(
function () {
return new Promise(function ($resolve) {
$resolve();
$resolve(null);
});
},
function () use (&$cancelled) {
Expand Down
2 changes: 1 addition & 1 deletion tests/WaterfallTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public function testWaterfallWillCancelFirstPendingPromiseWhenCallingCancelOnRes
$tasks = array(
function () {
return new Promise(function ($resolve) {
$resolve();
$resolve(null);
});
},
function () use (&$cancelled) {
Expand Down

0 comments on commit 57859f0

Please sign in to comment.