mirror of
https://github.com/danog/amp.git
synced 2025-01-22 13:21:16 +01:00
Add Pause; update for timer watcher changes in loop
This commit is contained in:
parent
378990fe86
commit
28577cf6e6
21
lib/Pause.php
Normal file
21
lib/Pause.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Amp\Awaitable;
|
||||||
|
|
||||||
|
use Interop\Async\Awaitable;
|
||||||
|
use Interop\Async\Loop;
|
||||||
|
|
||||||
|
class Pause implements Awaitable {
|
||||||
|
use Internal\Placeholder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $time Milliseconds before succeeding the awaitable.
|
||||||
|
* @param mixed $value Succeed the awaitable with this value.
|
||||||
|
*/
|
||||||
|
public function __construct($time, $value = null)
|
||||||
|
{
|
||||||
|
Loop::delay($time, function () use ($value) {
|
||||||
|
$this->resolve($value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -33,7 +33,6 @@ function coroutine(callable $worker) {
|
|||||||
function rethrow(Awaitable $awaitable) {
|
function rethrow(Awaitable $awaitable) {
|
||||||
$awaitable->when(function ($exception) {
|
$awaitable->when(function ($exception) {
|
||||||
if ($exception) {
|
if ($exception) {
|
||||||
/** @var \Throwable|\Exception $exception */
|
|
||||||
throw $exception;
|
throw $exception;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -135,9 +134,9 @@ function capture(Awaitable $awaitable, callable $functor) {
|
|||||||
function timeout(Awaitable $awaitable, $timeout) {
|
function timeout(Awaitable $awaitable, $timeout) {
|
||||||
$deferred = new Deferred;
|
$deferred = new Deferred;
|
||||||
|
|
||||||
$watcher = Loop::delay(function () use ($deferred) {
|
$watcher = Loop::delay($timeout, function () use ($deferred) {
|
||||||
$deferred->fail(new Exception\TimeoutException);
|
$deferred->fail(new Exception\TimeoutException);
|
||||||
}, $timeout);
|
});
|
||||||
|
|
||||||
$onResolved = function () use ($awaitable, $deferred, $watcher) {
|
$onResolved = function () use ($awaitable, $deferred, $watcher) {
|
||||||
Loop::cancel($watcher);
|
Loop::cancel($watcher);
|
||||||
@ -149,23 +148,6 @@ function timeout(Awaitable $awaitable, $timeout) {
|
|||||||
return $deferred->getAwaitable();
|
return $deferred->getAwaitable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an awaitable that succeeds after $time elapses.
|
|
||||||
*
|
|
||||||
* @param int $time
|
|
||||||
*
|
|
||||||
* @return \Interop\Async\Awaitable
|
|
||||||
*/
|
|
||||||
function pause($time) {
|
|
||||||
$deferred = new Deferred;
|
|
||||||
|
|
||||||
Loop::delay(function () use ($deferred) {
|
|
||||||
$deferred->resolve();
|
|
||||||
}, $time);
|
|
||||||
|
|
||||||
return $deferred->getAwaitable();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a awaitable that calls $promisor only when the result of the awaitable is requested (e.g., then() or
|
* Returns a awaitable that calls $promisor only when the result of the awaitable is requested (e.g., then() or
|
||||||
* done() is called on the returned awaitable). $promisor can return a awaitable or any value. If $promisor throws
|
* done() is called on the returned awaitable). $promisor can return a awaitable or any value. If $promisor throws
|
||||||
|
Loading…
x
Reference in New Issue
Block a user