Java Как мне включить обратный вызов в Promise? - PullRequest
0 голосов
/ 25 февраля 2019

Java Как включить обратный вызов в Promise?

Сцены

Ранее Java использовала функцию обратного вызова, чтобы дождаться загрузки указанного ресурса и затем выполнить обратный вызов.Теперь, если вы хотите изменить стиль Promise, есть ли хороший способ?

Например:

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

Преобразовать в

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

Кстати, я использовалбыть асинхронным в Promise в JavaScript, но я не знаком с ним в Java.,,Вот код, который упаковывает setTimeout как Обещание

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

Итак, есть ли какое-нибудь хорошее решение?


Я знаю, что есть CompletedFuture и CompletableFutureв Java, но я не знаю, как создать 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)
     })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...