Subversion Repositories cheapmusic

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
103 - 1
<?php
2
namespace GuzzleHttp\Promise;
3
 
4
/**
5
 * A promise that has been fulfilled.
6
 *
7
 * Thenning off of this promise will invoke the onFulfilled callback
8
 * immediately and ignore other callbacks.
9
 */
10
class FulfilledPromise implements PromiseInterface
11
{
12
    private $value;
13
 
14
    public function __construct($value)
15
    {
16
        if (method_exists($value, 'then')) {
17
            throw new \InvalidArgumentException(
18
                'You cannot create a FulfilledPromise with a promise.');
19
        }
20
 
21
        $this->value = $value;
22
    }
23
 
24
    public function then(
25
        callable $onFulfilled = null,
26
        callable $onRejected = null
27
    ) {
28
        // Return itself if there is no onFulfilled function.
29
        if (!$onFulfilled) {
30
            return $this;
31
        }
32
 
33
        $queue = queue();
34
        $p = new Promise([$queue, 'run']);
35
        $value = $this->value;
36
        $queue->add(static function () use ($p, $value, $onFulfilled) {
37
            if ($p->getState() === self::PENDING) {
38
                try {
39
                    $p->resolve($onFulfilled($value));
40
                } catch (\Throwable $e) {
41
                    $p->reject($e);
42
                } catch (\Exception $e) {
43
                    $p->reject($e);
44
                }
45
            }
46
        });
47
 
48
        return $p;
49
    }
50
 
51
    public function otherwise(callable $onRejected)
52
    {
53
        return $this->then(null, $onRejected);
54
    }
55
 
56
    public function wait($unwrap = true, $defaultDelivery = null)
57
    {
58
        return $unwrap ? $this->value : null;
59
    }
60
 
61
    public function getState()
62
    {
63
        return self::FULFILLED;
64
    }
65
 
66
    public function resolve($value)
67
    {
68
        if ($value !== $this->value) {
69
            throw new \LogicException("Cannot resolve a fulfilled promise");
70
        }
71
    }
72
 
73
    public function reject($reason)
74
    {
75
        throw new \LogicException("Cannot reject a fulfilled promise");
76
    }
77
 
78
    public function cancel()
79
    {
80
        // pass
81
    }
82
}