Promises in PHP with Icicle IO

Code
<?php

use function Icicle\Loop\run;
use 
Icicle\Awaitable\Promise;
use 
Icicle\Awaitable\Deferred;

$deferred = new Deferred();
$promise1 $deferred->getPromise();

$promise2 $promise1->then(
    function (
$int) {
        echo 
'promise 2' PHP_EOL;
        if (
14 === $int) {
            throw new 
Exception($int);
        }
        
        return 
$int;
    }
);

$promise2->done(
    function (
$int) {
        echo 
'promise done:' PHP_EOL;
        echo 
$int;
    },
    function (
Exception $exception) {
        echo 
'Error: '$exception->getMessage();
    }
);

$deferred->resolve(1);

run();
Result
promise 2
promise done:
1
Used Versions
PHP 7.1, Zend 3.0, Symfony 3.2, Laravel 5.2, PHPUnit 5.6, Doctrine 2.6