Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

242
Vistas
pregunta sobre las rutinas de kotlin con webclient

Soy nuevo en kotlin. He escrito una función que procesa dos llamadas de cliente web en paralelo y luego agrega el resultado. el punto es que está escrito en un estilo java (debajo del código)

 @GetMapping("/personv1/{id}") suspend fun getPerson1(@PathVariable id :Integer): Mono<Person> = Mono.zip( webClient.get().uri("/person/{id}", id).retrieve().bodyToMono(Person::class.java), webClient.get().uri("/person/{id}/domain", id).retrieve().bodyToMono(String::class.java) ) { person, domain -> Person(person.id, person.name, domain) }

Quería hacer el mismo código usando corrutinas siguiendo los ejemplos, pero estoy bloqueado desde el principio. Mi idea era declarar dos variables, una de tipo Diferido de una persona y la otra Diferida de una cadena y luego esperar a que fusionen los datos, pero no puedo declarar ninguna de las variables.

Aquí está el código que he comenzado.

 @GetMapping("/personv2/{id}") suspend fun getPerson2(@PathVariable id :Integer): Person = coroutineScope { val person: Deferred<Person> = async { webClient .get() .uri("/person/{id}", id) .retrieve() .awaitBody<Person>() } }

Pero mi IDE me dice que el valor de mi persona debe ser del tipo ServerResponse y no un Diferido de Persona

¿Puede alguien ayudarme en eso? ¿Qué estoy haciendo mal?

Gracias por tu ayuda

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Reemplace async con this@coroutineScope.async .

Debe haber alguna otra función en su alcance llamada async que tenga una resolución de mayor prioridad que CoroutineScope.async dentro de su coroutineScope lambda. Al coroutineScope lambda se le pasa un CoroutineScope como receptor, por lo que this@coroutineScope.async aclarará que quiere llamar específicamente a CoroutineScope.async en el receptor de la lambda y no en alguna otra función async .

No estoy familiarizado con Spring, así que no tengo ninguna idea de cuál es la otra función async . Es posible que pueda cambiar sus importaciones en este archivo de modo que async se resuelva en CoroutineScope.async sin tener que anteponerlo con this@coroutineScope . Si desea averiguar a qué otra función se está resolviendo, elimine el prefijo y presione Ctrl + clic en el nombre de la función async y el IDE lo llevará al código fuente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda