From e68e9a85e15c7861d61919776b3abddebd7d0140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20L=C3=BCck?= Date: Thu, 9 Jun 2022 19:02:21 +0200 Subject: [PATCH] Forward compatibility with upcoming Promise v3 --- composer.json | 2 +- src/functions.php | 12 +++++------- tests/SeriesTest.php | 2 +- tests/WaterfallTest.php | 2 +- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index d749726..798768a 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "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" diff --git a/src/functions.php b/src/functions.php index f738168..0532394 100644 --- a/src/functions.php +++ b/src/functions.php @@ -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; @@ -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(); } }); @@ -535,7 +533,7 @@ function parallel(iterable $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(); } } @@ -549,7 +547,7 @@ function parallel(iterable $tasks): PromiseInterface $deferred->reject($error); foreach ($pending as $promise) { - if ($promise instanceof CancellablePromiseInterface) { + if ($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) { $promise->cancel(); } } @@ -593,7 +591,7 @@ function series(iterable $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; @@ -644,7 +642,7 @@ function waterfall(iterable $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; diff --git a/tests/SeriesTest.php b/tests/SeriesTest.php index 2583639..404c907 100644 --- a/tests/SeriesTest.php +++ b/tests/SeriesTest.php @@ -174,7 +174,7 @@ public function testSeriesWillCancelFirstPendingPromiseWhenCallingCancelOnResult $tasks = array( function () { return new Promise(function ($resolve) { - $resolve(); + $resolve(null); }); }, function () use (&$cancelled) { diff --git a/tests/WaterfallTest.php b/tests/WaterfallTest.php index ace1877..2fbbc23 100644 --- a/tests/WaterfallTest.php +++ b/tests/WaterfallTest.php @@ -188,7 +188,7 @@ public function testWaterfallWillCancelFirstPendingPromiseWhenCallingCancelOnRes $tasks = array( function () { return new Promise(function ($resolve) { - $resolve(); + $resolve(null); }); }, function () use (&$cancelled) {