1
0
Fork 0
mirror of synced 2024-09-30 01:08:13 +13:00

Fix promise adapter all resolving on a started scheduler

This commit is contained in:
Jake Barnby 2022-04-22 22:08:30 +12:00
parent 1057d7e3aa
commit 5b1f973b45
No known key found for this signature in database
GPG key ID: A4674EBC0E404657

View file

@ -6,6 +6,7 @@ use GraphQL\Error\InvariantViolation;
use GraphQL\Executor\Promise\Promise;
use GraphQL\Executor\Promise\PromiseAdapter;
use GraphQL\Utils\Utils;
use function Co\go;
class CoroutinePromiseAdapter implements PromiseAdapter
{
@ -66,28 +67,25 @@ class CoroutinePromiseAdapter implements PromiseAdapter
$count = 0;
$result = [];
\Co\run(function ($promisesOrValues, $all, $total, &$count, $result) {
foreach ($promisesOrValues as $index => $promiseOrValue) {
go(function ($index, $promiseOrValue, $all, $total, &$count, $result) {
if (!($promiseOrValue instanceof CoroutinePromise)) {
$result[$index] = $promiseOrValue;
$count++;
return;
}
$result[$index] = null;
$promiseOrValue->then(
static function ($value) use ($index, &$count, $total, &$result, $all): void {
$result[$index] = $value;
$count++;
if ($count === $total) {
$all->resolve($result);
}
},
[$all, 'reject']
);
}, $index, $promiseOrValue, $all, $total, $count, $result);
}
}, $promisesOrValues, $all, $total, $count, $result);
foreach ($promisesOrValues as $index => $promiseOrValue) {
go(function ($index, $promiseOrValue, $all, $total, &$count, $result) {
if (!($promiseOrValue instanceof CoroutinePromise)) {
$result[$index] = $promiseOrValue;
$count++;
return;
}
$result[$index] = null;
$promiseOrValue->then(
function ($value) use ($index, &$count, $total, &$result, $all): void {
$result[$index] = $value;
if ($count++ === $total) {
$all->resolve($result);
}
},
[$all, 'reject']
);
}, $index, $promiseOrValue, $all, $total, $count, $result);
}
if ($count === $total) {
$all->resolve($result);