多次更新对象时,只更新最后一个对象。我希望执行所有更新操作

while updating object several times, only last object is updated. I want all update operations to be executed

我是 vert.x 框架和 rx-java 的新手。我目前正在与 mongoDB 合作。问题是我必须多次更新同一个对象,但只执行最后一次更新。下面提供了代码。 findByProductId 方法 returns 必需的对象。如果此 ID 的对象在数据库中尚不存在,则检查可能会 return false。

fun cancelProductStateCountList(inventoryList: List<Inventory>) : Observable<List<ProductState>> {
    return Observable.create({ event ->
        val count = inventoryList.count()
        var counter = 0
        var itemCounter = 0
        val result = mutableListOf<ProductState>()
        var searchingId = ""
        Observable
                .fromArray(inventoryList)
                .flatMapIterable({
                    items -> items
                })
                .flatMap({
                    item ->
                    searchingId = item.productId!!
                    findByProductId(item.productId!!)
                })
                .flatMap ({
                    if(it is ProductState){
                        if(inventoryList[itemCounter].operation == InventoryOperation.HOLD.value()){
                            var quantityAvailable: Double = it.quantity!!
                            var quantityHold: Double = it.hold!!
                            quantityAvailable += inventoryList[itemCounter].quantity!!
                            quantityHold -= inventoryList[itemCounter].quantity!!
                            it.quantity = quantityAvailable
                            it.hold = quantityHold
                            itemCounter ++
                            updateWithoutDuplicate(it)
                        } else {
                            var quantityAvailable: Double = it.quantity!!
                            quantityAvailable += inventoryList[itemCounter].quantity!!
                            it.quantity = quantityAvailable
                            itemCounter ++
                            updateWithoutDuplicate(it)
                        }
                    } else {
                        Observable.just("")
                    }

                })
                .subscribe({
                    if(it is ProductState){
                        result.add(it)
                        counter ++
                        if (counter == count) {
                            event.onNext(result)
                        }
                    } else {
                        event.onError(NotExistsException("productId", searchingId))
                    }

                }, {
                    event.onError(it)
                })

    })
}

我发现这段代码存在一些问题:

  1. 无故使用 flatMap()。检查 flatMap() 在这个答案中是如何工作的:When do you use map vs flatMap in RxJava?
  2. 在 Kotlin 中使用 !!,又名 bang-bang。通常这意味着你并不真正理解你的 API 是如何工作的,并且最终会导致 NullPointer
  3. 我猜 updateWithoutDuplicate() 是 MongoDB 的目标,尽管您没有 post 实际代码。但是,看到你如何在没有任何回调或 await() 的情况下调用它,我假设你希望它同步运行。考虑到您同时使用 Vert.x 和 MongoDB,更改是异步的。