override fun uploadFileAndNotifyCadmium(
validatedPages: List<KycFile>,
documentId: UUID,
): Mono<Unit> {
validatedPages.forEach { it ->
s3Service.uploadToToxicBucket(
documentId, it.fileName })
.then()
}
return cadmiumClient.notifyCadmium(documentId) // API call to other microservice
}
У меня есть этот метод, где я пытаюсь вызвать метод (s3Service.uploadToToxicBucket()
), который возвращает Mono of Unit при повторении списка. Я хочу убедиться, что этот метод вызывается для каждого из элементов списка. Поэтому я добавил затем () к полученному моно. Также я хочу, чтобы метод cadmiumClient.notifyCadmium()
выполнялся только после загрузки всех файлов. Это правильный способ сделать это или я могу использовать какой-то другой оператор. cadmiumClient.notifyCadmium () также возвращает Mono of Unit.
Также я звоню uploadFileAndNotifyCadmium().then()
, когда звоню uploadFileAndNotifyCadmium()
.
Я использую then (), потому что выполнение ленивый, и я не хочу вызывать subscribe () для проверки выполнения этих методов. Также в контроллере вызывается метод uploadFileAndNotifyCadmium (), поэтому он автоматически подписывается Spring Webflux. Мое понимание относительно использования then () может быть неправильным.
Подход 2: Я также думал о том, чтобы сделать это:
override fun uploadFileAndNotifyCadmium(
validatedPages: List<KycFile>,
documentId: UUID,
): Mono<Unit> {
val list = mutableListOf<Mono<Unit>>()
validatedPages.forEach { it ->
val result =s3Service.uploadToToxicBucket(
documentId, it.fileName })
list.add(result)
}
//Zip all the elements in list together into some variable zippedResult
return zippedResult.then(cadmiumClient.notifyCadmium(documentId)) // API call to other microservice
}
Для этого подхода я не могу найти ни одного оператора для zip все элементы вместе, когда размер списка неизвестен.