managers as $connector) { /* @var $connection Connector */ $all []= $connector->connect($uri); } return Promise\any($all)->then(function ($conn) use ($all) { // a connection attempt succeeded // => cancel all pending connection attempts foreach ($all as $promise) { if ($promise instanceof CancellablePromiseInterface) { $promise->cancel(); } // if promise resolves despite cancellation, immediately close stream $promise->then(function ($stream) use ($conn) { if ($stream !== $conn) { $stream->close(); } }); } return $conn; }); } }