Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

139
Visualizações
Encadenamiento condicional Java8 CompletableFuture

He leído muchos tutoriales futuros completables de java8, la mayoría de ellos son básicamente iguales. Todos hablan de algún método básico "thenAccept"/"thenApply"/thenCombine" para construir un flujo de canalización.

Pero cuando se trata de un problema de trabajo real, me resulta difícil organizar diferentes futuros completables de diferentes Servicios. Por ejemplo:

 interface Cache{ CompletableFuture<Bean> getAsync(long id); CompletableFuture<Boolean> saveAsync(Bean bean); } interface DB{ Completable<Bean> getAsync(long id) }

la lógica del servicio es bastante simple, obtenga datos de Cache, si existen, devuélvalos a nuestro cliente, si no, obténgalos de DB, si existen, guárdelos en Cache y devuélvalos a nuestro cliente, si ninguno existe en DB, devuelva " error" al cliente.

usando la API de sincronización, será bastante sencillo. Pero cuando se usa una API asíncrona, hay "muchas canalizaciones", muchas interrupciones condicionales. No puedo entender cómo implementar esto usando CompletableFuture API.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si no le importa el resultado de guardar en el caché y si desea lanzar una excepción en el bean no encontrado, entonces puede ser, por ejemplo

 CompletableFuture<Bean> findBeanAsync(long id, Cache cache, DB db) { return cache.getAsync(id).thenCompose(bean -> { if (bean != null) { return CompletableFuture.completedFuture(bean); } return db.getAsync(id).thenApply(dbBean -> { if (dbBean == null) { throw new RuntimeException("bean not found with id " + id); } cache.saveAsync(dbBean); return dbBean; }); }); }
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda