/** * @param \Amp\Observable $observable */ public function __construct(Observable $observable) { $this->observable = $observable; $deferred =& $this->deferred; $values =& $this->values; $deferreds =& $this->deferreds; $resolved =& $this->resolved; $this->observable->subscribe(static function ($value) use(&$deferred, &$values, &$deferreds, &$resolved) { $values[] = $value; $deferreds[] = $pressure = new Deferred(); if ($deferred !== null) { $temp = $deferred; $deferred = null; $temp->resolve(true); } if ($resolved) { return null; } return $pressure->promise(); }); $result =& $this->result; $error =& $this->exception; $this->observable->when(static function ($exception, $value) use(&$deferred, &$result, &$error, &$resolved) { $resolved = true; if ($exception) { $result = null; $error = $exception; if ($deferred !== null) { $deferred->fail($exception); } return; } $result = $value; if ($deferred !== null) { $deferred->resolve(false); } }); }