私はリアクティブ プログラミングが初めてで、2 つの API 呼び出しを並行して行い、結果を処理して単純な配列またはアイテムのリストを返したいと考えています。
私には 2 つの関数があり、1 つは Flux を返し、もう 1 つは Mono を返します。その Mono の結果に応じて、Flux が放出したアイテムに対して非常に単純なフィルタリング ロジックを作成します。
使用しようとしましzipWith
たが、どのようなフィルタリング ロジックを使用しても、最後に到達したアイテムは 1 つだけでした。また、試してみましblock
たが、コントローラー内では許可されていません:/
@GetMapping("/{id}/offers")
fun viewTaskOffers(
@PathVariable("id") id: String,
@AuthenticationPrincipal user: UserPrincipal
) : Flux<ViewOfferDTO> {
data class TaskOfferPair(
val task: TaskDTO,
val offer: ViewOfferDTO
)
return client.getTaskOffers(id).map {
it.toViewOfferDTO()
}.zipWith(client.getTask(id), BiFunction {
offer: ViewOfferDTO, task: TaskDTO -> TaskOfferPair(task, offer)
}).filter {
it.offer.workerUser.id == user.id || it.task.creatorUser == user.id
}.map {
it.offer
}
}
getTaskOffers
の Flux を返しますOfferDTO
getTask
のモノを返しますTaskDTO
私の質問に答えられない場合は、少なくとも複数の API 呼び出しを並行して実行し、WebClient で結果を待つ方法を教えてください。