java - 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中有CompletedFuture
and 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)
})
解决方案
推荐阅读
- macos - 在 MacOS 上禁用 wxWidgets 菜单
- laravel - 如何将laravel trans字符串传递给vue组件
- flutter - 元素类型“String”不能分配给列表类型“DropdownMenuItem”
' - kubernetes - 如何在 istio 运营商补丁中添加服务注释
- javascript - 具有最小基数的唯一标识符,不会在旧/新数据集上发生冲突
- reactjs - 如何使用基于切换的redux使输入字段在切换时可编辑?
- java - 使用 AWS 开发工具包 - 错误 PKIX 路径构建在 AWS Lambda 函数内运行失败
- here-api - 验证 findsequence 服务请求 HERE Maps API
- php - htaccess 设置 rest api 来处理不存在的目录
- docker - 为什么在没有 sudo 的情况下运行时清空 'docker-machine ls' 输出,而 'sudo docker-machine ls' 有效?