以前,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
和CompletableFuture
,但是我不知道如何创建CompletableFuture
对象并在构造函数中使用绑定的回调函数。
例如,我的班级确实可以将以下代码转换为currying函数。
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)
})