fix: apply orDefault function when already completed

This commit is contained in:
2025-10-04 19:02:27 +01:00
parent 51fac28604
commit df1ee340dd
4 changed files with 21 additions and 8 deletions

View File

@@ -504,11 +504,12 @@ public abstract class AbstractPromise<T> implements Promise<T> {
@Override
public @NotNull Promise<T> orDefault(@NotNull ExceptionalFunction<Throwable, T> function) {
PromiseFactory factory = getFactory();
return useCompletion(() -> {
CompletablePromise<T> promise = createLinked();
addDirectListener(promise::complete, e -> runCompleter(promise, () -> promise.complete(function.apply(e))));
return promise;
}, getFactory()::resolve, getFactory()::error);
}, factory::resolve, e -> supplySafe(() -> factory.resolve(function.apply(e)), factory::error));
}
private static class DeferredExecutionException extends ExecutionException {