我正在Android项目中使用Room Persistence Library。 ViewModel类:
class ShoppingListsViewModel(
private val toBuyProductRepository: ToBuyProductRepository,
private val shoppingListRepository: ShoppingListRepository,
private val productRepository: ProductRepository
) : ViewModel() {
fun addShoppingListWithProductsToBuy(listName: String) {
viewModelScope.launch {
val listId: Long = shoppingListRepository.insertList(ShoppingList(listName))
val productsToBuy: List<ToBuyProduct> = toBuyProductRepository.getAllProductsNLD()
productsToBuy.forEach {
productRepository.insert(
Product(
ProductDetails(productName = it.name),
listId
)
)
}
}
}
}
存储库:
class ShoppingListRepository(
private val shoppingListDao: ShoppingListDao
) {
suspend fun insertList(list: ShoppingList): Long = shoppingListDao.insertList(list)
}
class ToBuyProductRepository(
private val toBuyProductDao: ToBuyProductDao
) {
suspend fun getAllProductsNLD(): List<ToBuyProduct> = toBuyProductDao.getAllProductsNLD()
}
class ProductRepository(
private val productDao: ProductDao
) {
suspend fun insert(product: Product) = productDao.insert(product)
}
DAO:
@Dao
interface ShoppingListDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertList(list: ShoppingList): Long
}
@Dao
interface ToBuyProductDao {
@Query("SELECT * FROM tobuyrecord")
suspend fun getAllProductsNLD(): List<ToBuyProduct>
}
@Dao
interface ProductDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(product: Product)
}
问题与功能addShoppingListWithProductsToBuy
有关。 toBuyProductRepository.getAllProductsNLD()
始终返回有效列表。但是productsToBuy.forEach
中的迭代次数是随机的,并且不取决于productsToBuy
的大小。协程似乎在productRepository.insert
上暂停了一段时间,再也没有恢复。