diff --git a/src/main/java/io/vertx/core/Future.java b/src/main/java/io/vertx/core/Future.java index 348e20af2..24654e8fe 100644 --- a/src/main/java/io/vertx/core/Future.java +++ b/src/main/java/io/vertx/core/Future.java @@ -36,7 +36,11 @@ public interface Future extends AsyncResult { */ static Future future(Handler> handler) { Promise promise = Promise.promise(); - handler.handle(promise); + try { + handler.handle(promise); + } catch (Exception e){ + promise.tryFail(e); + } return promise.future(); } diff --git a/src/test/java/io/vertx/core/FutureTest.java b/src/test/java/io/vertx/core/FutureTest.java index 3c3e4a024..6ed0e202d 100644 --- a/src/test/java/io/vertx/core/FutureTest.java +++ b/src/test/java/io/vertx/core/FutureTest.java @@ -65,14 +65,10 @@ public class FutureTest extends VertxTestBase { assertSame(f2, ref.get().future()); assertEquals(1, count.get()); new Checker<>(f2).assertFailed(cause); - try { - Future.future(f -> { - throw cause; - }); - fail(); - } catch (Exception e) { - assertSame(cause, e); - } + Future f3 = Future.future(f -> { + throw cause; + }); + assertSame(cause, f3.cause()); } @Test