Version 1
[yaffs-website] / vendor / guzzlehttp / promises / src / FulfilledPromise.php
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 }