首页 > 解决方案 > Java 如何将回调转换为 Promise?

问题描述

Java 如何将回调转换为 Promise?

场景

以前,Java 使用回调函数等待指定资源加载,然后执行回调。现在,如果你想改成 Promise 风格,有什么好的办法吗?

例如

Void watch(Predicate<String> f, Consumer<Stat> callback)

转换成

Future<Stat> watch(Predicate<String> f)

顺便说一句,我以前在 JavaScript 中的 Promise 中是异步的,但在 Java 中我并不熟悉。. . 这是包装setTimeout为 Promise的代码

Var wait = ms => new Promise(res => setTimeout(res, ms))

那么,有什么好的解决办法吗?


我知道Java中有CompletedFutureand CompletableFuture,但是我不知道如何创建CompletableFuture对象并在构造函数中使用绑定的回调函数。

比如我的类确实可以将下面的代码转换成柯里化函数。

Default void watch(String path, Consumer<Stat> callback) {
    Watch(map -> map.get(ListUtil.ListDiffState.right).stream()
            .filter(stat -> Objects.equals(stat.getPath(), path))
            .findFirst(), callback);
}

转换后

Default Consumer<Consumer<Stat>> watch(String path) {
    Return callback -> watch(path, callback);
}

但是我这代不能转成CompletedFuture异步方式(无法获取CompletedFuture绑定的回调函数),求教!


我现在调用的代码如下

watch("/test/test.xml", stat -> {
     Log.info("Result file has been created: {}", stat)
})

理想化的调用应该是

watch("/test/test.xml")
     .thenAccept(stat -> {
         Log.info("Result file has been created: {}", stat)
     })

标签: javapromisecallback

解决方案


推荐阅读