Skip to content

Commit bd422ed

Browse files
committed
Fix RetryExecutor
1 parent 0a60a7e commit bd422ed

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

Query/RetryExecutor.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
namespace React\Dns\Query;
44

5+
use React\Promise\Deferred;
6+
use React\Promise\When;
7+
58
class RetryExecutor implements ExecutorInterface
69
{
710
private $executor;
@@ -16,28 +19,34 @@ public function __construct(ExecutorInterface $executor, $retries = 2)
1619

1720
public function query($nameserver, Query $query)
1821
{
19-
return $this->tryQuery($nameserver, $query, $this->retries);
22+
$deferred = new Deferred();
23+
24+
$this->tryQuery($nameserver, $query, $this->retries, $deferred->resolver());
25+
26+
return $deferred->promise();
2027
}
2128

22-
public function tryQuery($nameserver, Query $query, $retries)
29+
public function tryQuery($nameserver, Query $query, $retries, $resolver)
2330
{
2431
$that = $this;
25-
$errorback = function ($error) use ($nameserver, $query, $retries, $that) {
32+
$errorback = function ($error) use ($nameserver, $query, $retries, $resolver, $that) {
2633
if (!$error instanceof TimeoutException) {
27-
return $error;
34+
$resolver->reject($error);
35+
return;
2836
}
2937
if (0 >= $retries) {
3038
$error = new \RuntimeException(
3139
sprintf("DNS query for %s failed: too many retries", $query->name),
3240
0,
3341
$error
3442
);
35-
return $error;
43+
$resolver->reject($error);
44+
return;
3645
}
37-
return $that->tryQuery($nameserver, $query, $retries-1);
46+
$that->tryQuery($nameserver, $query, $retries-1, $resolver);
3847
};
3948

40-
return $this->executor->query($nameserver, $query, $errorback)
41-
->then(null, $errorback);
49+
$this->executor->query($nameserver, $query)
50+
->then(array($resolver, 'resolve'), $errorback);
4251
}
4352
}

0 commit comments

Comments
 (0)