从数据库更新 webclient 响应

Updating webclient response from database

我遇到无法更新数据库列的情况。 问题是只执行方法 setIsPurchased 并且 SQL table 处的标志 is_purchase 更改为 true,但下一行 setPurchasedDate 必须设置当前时间不执行。来自数据库的响应是 Mono<Void> 类型。

fun purchase(uuid: UUID, request: PurchaseInternalRequest) =
        extraProductTransactionService.findTransactionByUuid(uuid)
            .doOnNext { it.validateNotPurchased() }
            .flatMap { purchaseViaSupplier(it, request) }
            .flatMap { extraProductTransactionService.setIsPurchased(uuid) }
            .flatMap { extraProductTransactionService.setPurchasedDate(uuid) }
            .onErrorMap(Exception::class.java) { Exception(it.status) }
            .then()

这两种方法的查询很简单,如下所示:

对于setIsPurchased

update extra_product_transactions SET is_purchased = 1 where uuid = :uuid

对于setPurchasedDate

update extra_product_transactions SET purchased_date = CURRENT_TIMESTAMP where uuid = :uuid

A Mono<Void> 本质上永远不会发出元素 onNext()。话虽如此,.flatMap { extraProductTransactionService.setPurchasedDate(uuid) } 永远不会被调用。

我假设您对 set 方法的 return 值不感兴趣,因此您可以执行以下操作:

fun purchase(uuid: UUID, request: PurchaseInternalRequest) =
    extraProductTransactionService.findTransactionByUuid(uuid)
        .doOnNext { it.validateNotPurchased() }
        .flatMap { purchaseViaSupplier(it, request) }
        .flatMap { 
          extraProductTransactionService.setIsPurchased(uuid).subscribe()
          extraProductTransactionService.setPurchasedDate(uuid)
        }
        .onErrorMap(Exception::class.java) { Exception(it.status) }
        .then()