diff --git a/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java b/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java index 0cd56e8..1e9470d 100644 --- a/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java +++ b/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java @@ -166,12 +166,16 @@ public abstract class AbstractPromise implements Promise { } @Override - public @NotNull Promise thenComposeSync(@NotNull ExceptionalFunction> task) { + public @NotNull Promise thenComposeSync(@NotNull ExceptionalFunction> task) { Promise promise = getFactory().unresolved(); thenApplySync(task).addDirectListener( nestedPromise -> { - propagateResult(nestedPromise, promise); - propagateCancel(promise, nestedPromise); + if (nestedPromise == null) { + promise.complete(null); + } else { + propagateResult(nestedPromise, promise); + propagateCancel(promise, nestedPromise); + } }, promise::completeExceptionally ); @@ -267,8 +271,12 @@ public abstract class AbstractPromise implements Promise { Promise promise = getFactory().unresolved(); thenApplyAsync(task).addDirectListener( nestedPromise -> { - propagateResult(nestedPromise, promise); - propagateCancel(promise, nestedPromise); + if (nestedPromise == null) { + promise.complete(null); + } else { + propagateResult(nestedPromise, promise); + propagateCancel(promise, nestedPromise); + } }, promise::completeExceptionally ); diff --git a/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java b/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java index 9efcbf8..b9bc09d 100644 --- a/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java +++ b/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java @@ -33,7 +33,7 @@ public interface Promise { @NotNull Promise thenApplyDelayedSync(@NotNull ExceptionalFunction task, long delay, @NotNull TimeUnit unit); - @NotNull Promise thenComposeSync(@NotNull ExceptionalFunction> task); + @NotNull Promise thenComposeSync(@NotNull ExceptionalFunction> task); @NotNull Promise thenRunAsync(@NotNull ExceptionalRunnable task);