From d14f832823c4e08dd692f9b70fc91a2ac03ebc13 Mon Sep 17 00:00:00 2001 From: cpdyj Date: Mon, 5 Aug 2019 22:45:46 +0800 Subject: [PATCH] Future will fail when the handler which is passed to `Future.future` throws an Exception. (#3057) * Future will fail on `Future.future` throws an Exception. Signed-off-by: iseki * Modify testcase and fix format. Signed-off-by: iseki --- src/main/java/io/vertx/core/Future.java | 6 +++++- src/test/java/io/vertx/core/FutureTest.java | 12 ++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) 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