diff options
author | marvin-borner@live.com | 2018-04-10 21:50:16 +0200 |
---|---|---|
committer | marvin-borner@live.com | 2018-04-10 21:54:48 +0200 |
commit | fc9401f04a3aca5abb22f87ebc210de8afe11d32 (patch) | |
tree | b0b310f3581764ec3955f4e496a05137a32951c3 /assets/php/vendor/react/promise/src/CancellationQueue.php | |
parent | 286d643180672f20526f3dc3bd19d7b751e2fa97 (diff) |
Initial Commit
Diffstat (limited to 'assets/php/vendor/react/promise/src/CancellationQueue.php')
-rw-r--r-- | assets/php/vendor/react/promise/src/CancellationQueue.php | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/assets/php/vendor/react/promise/src/CancellationQueue.php b/assets/php/vendor/react/promise/src/CancellationQueue.php new file mode 100644 index 0000000..a366994 --- /dev/null +++ b/assets/php/vendor/react/promise/src/CancellationQueue.php @@ -0,0 +1,55 @@ +<?php + +namespace React\Promise; + +class CancellationQueue +{ + private $started = false; + private $queue = []; + + public function __invoke() + { + if ($this->started) { + return; + } + + $this->started = true; + $this->drain(); + } + + public function enqueue($cancellable) + { + if (!method_exists($cancellable, 'then') || !method_exists($cancellable, 'cancel')) { + return; + } + + $length = array_push($this->queue, $cancellable); + + if ($this->started && 1 === $length) { + $this->drain(); + } + } + + private function drain() + { + for ($i = key($this->queue); isset($this->queue[$i]); $i++) { + $cancellable = $this->queue[$i]; + + $exception = null; + + try { + $cancellable->cancel(); + } catch (\Throwable $exception) { + } catch (\Exception $exception) { + } + + unset($this->queue[$i]); + + if ($exception) { + throw $exception; + } + } + + $this->queue = []; + } +} |