Thanks Tim,

I had actually put together a version almost similar using whenComplete. I
must be starting to get the hang of it ;), but I must still admit that your
implementation addresses a few holes in mine.

Alain


On Mon, Oct 29, 2018 at 5:58 AM Tim Ward <tim.w...@paremus.com> wrote:

> Hi Alain,
>
> Unsurprisingly this isn’t very hard to do:
>
>     private PromiseFactory pf;
>
>     public <T> Promise<T> toPromise(CompletionStage<T> cs) {
>         Deferred<T> deferred = pf.deferred();
>         cs.whenComplete((r,e) -> {
>             if(e == null) {
>                 deferred.resolve(r);
>             } else {
>                 deferred.fail(e);
>             }
>         });
>         return deferred.getPromise();
>     }
>
>     public <T> Promise<T> toPromise(CompletableFuture<T> cf) {
>         if(cf.isDone() && !cf.isCompletedExceptionally()) {
>             return pf.resolved(cf.getNow(null));
>         } else {
>             return toPromise((CompletionStage<T>) cf);
>         }
>     }
>
> Note that the CompletableFuture version is just a way to optimise when the
> Completable Future is already successfully resolved (the API for consuming
> failures is so bad that it’s not worth trying to optimise the already
> failed case).
>
> Best Regards,
>
> Tim
>
> On 28 Oct 2018, at 15:41, Alain Picard via osgi-dev <
> osgi-dev@mail.osgi.org> wrote:
>
> We are now using Promises all over the place, but we are finding ourselves
> using a library that uses CompletableFuture and want our service based on
> that library to convert those futures into promises.
>
> Has anyone done this before? While I can surely find a way of doing it, I
> would like to get some best practice advice from the experts.
>
> Cheers,
> Alain
>
> _______________________________________________
> OSGi Developer Mail List
> osgi-dev@mail.osgi.org
> https://mail.osgi.org/mailman/listinfo/osgi-dev
>
>
>
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to