我有以下服务电话:
productService.GetAllProducts()
productService.DeleteProduct()
productService.GetCategories()
productService.DeleteCategory()
在sudo代码中,我需要在组件中执行以下操作:
使用productService.GetAllProducts()获取产品列表。
浏览产品列表,并为每个产品调用productService.DeleteProduct()。
一旦我可以确认上述删除全部完成(由于数据库限制),则需要使用productService.GetCategories()获得类别列表。遍历每个类别并调用productService.DeleteCategory()。
我知道,如果我有更好的后端调用来进行批量删除,我的生活将会轻松很多,但是在这种情况下,我别无选择。我需要遵循获取列表,循环浏览列表,逐个删除每个项目的模式。
使用flatMap和可观察到的完整参数甚至有可能做我想做的事情吗?我最大的问题是在搜索并删除所有类别之前,知道代码何时完成删除所有产品。
答案 0 :(得分:2)
您可能想尝试以下方法
productService.GetAllProducts()
.switchMap(
products => forkJoin(products.map(product => productService.DeleteProduct(product)))
)
.switchMap(() => productService.GetCategories())
.switchMap(
categories => forkJoin(categories.map(category => productService.DeleteCategory(category)))
)
.subscribe(() => console.log('done'))
整个想法如下
switchMap
map
转换为
DeleteProduct结果的可观察值-的数组
Observable作为参数传递给第一个forkJoin
forkJoin
在其接收到的所有可观测对象发出时发出
参数完整,因此当所有产品
已被删除我不确定代码在语法上是否完美,但足以让您了解如何进行操作。