register("hello", function (Context $context) { return new Promise(function (callable $resolve) use ($context) { Loop::addTimer(1, function () use ($context, $resolve) { $resolve("Hello, {$context->name}"); }); }); }); $commands->register("hello2", function (Context $context) { return "Hello2, {$context->name}"; }); $bus = new CommandBus($commands); $bus->execute('hello', ['name'=>'Bob']) ->then(function ($result) { var_dump($result); }); $bus->execute('hello2', ['name'=>'Bob']) ->then(function ($result) { var_dump($result); });