在 Angular 中同步调用一个又一个的可观察对象

2023-11-25

我可以拨打以下服务电话:
产品服务.GetAllProducts()
产品服务.删除产品()
产品服务.GetCategories()
产品服务.DeleteCategory()

在 sudo 代码中,我需要在组件中执行以下操作:

  1. 使用productService.GetAllProducts() 获取产品列表。

  2. 循环遍历产品列表并为每个产品调用productService.DeleteProduct()。

  3. 一旦我确认上述删除全部完成(由于数据库限制),我就需要使用productService.GetCategories() 获取类别列表。循环遍历每个类别并调用productService.DeleteCategory()。

我知道如果我有更好的后端调用来进行批量删除,我的生活会容易得多,但在这种情况下我别无选择。我需要遵循获取列表、循环遍历它、对每个项目进行单独删除的模式。

是否有可能使用 flatMap 和可观察的完整参数来做我想做的事情?我最大的问题是在搜索和删除所有类别之前知道代码何时完成删除所有产品。


你可能想尝试一些类似的事情

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'))

整个想法如下

  • GetAllProducts 返回一个产品数组,该数组传递为 参数为第一个switchMap
  • Products 数组被转换,通过map,进入一个数组 Observables 是 DeleteProduct 的结果 - 数组 Observable 被传递给第一个forkJoin作为其参数
  • forkJoin当它收到的所有 Observables 为 参数完整,因此当所有产品 已被删除
  • 对于类别重复相同的推理

我不确定代码在语法上是否完美,但它应该足以让您了解如何继续。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Angular 中同步调用一个又一个的可观察对象 的相关文章

随机推荐

  • 在 Swing 应用程序中组织操作?

    我当前的应用程序有一个 JFrame 其中约有 15 个操作存储为 JFrame 中的字段 每个操作都是一个匿名类 其中一些非常长 将操作分解为它们自己的类 可能位于称为操作的子包中 是否很常见 如果不是 通常如何控制这种复杂性 Thank
  • 如何使用 mysql 二进制日志从删除数据库命令恢复?

    如何恢复使用 drop database 命令删除的 mysql 数据库 我可以访问二进制日志 这应该使这种类型的回滚成为可能 文档很糟糕 它暗示 DROP DATABASE 是可恢复的 但仅在我不熟悉的奇怪条件下http dev mysq
  • Flutter - 无线电动画未显示在 showDialog 上

    我正在尝试创建一个Radio in a showDialog 但是发生的动画Radio没有出现在showDialog 例如 当点击时foo2什么也没有发生 当你退出时showDialog然后回到它 foo2被选中 下面是代码和 gif 显示
  • C# 委托中的元帅 va_list

    我正在尝试用 c 来完成这项工作 C 标头 typedef void LogFunc const char format va list args bool Init uint32 version LogFunc log C 实现 stat
  • Java 同步和性能的一个方面

    我刚刚意识到我需要在某个方面同步大量数据收集代码 但性能是一个真正值得关注的问题 如果性能下降太多 我的工具就会被淘汰 我将分别写入 int 和 long 以及各种数组 ArrayList 和 Map 应用程序将有多个线程进行函数调用 这些
  • 如何使用 SASS 进行媒体查询?

    我已经通读了 SASS 文档 只能找到如何使用 scss 语法而不是 sass 语法进行媒体查询 sass 是具有严格的空白 没有大括号或分号的语法 如何使用 sass 语法进行媒体查询 media screen and min heigh
  • pcl::RANSAC 分割,获取云中的所有平面?

    我有一个点云库函数 可以检测点云中最大的平面 这很好用 现在 我想扩展此功能以分割云中的每个平面并将这些点复制到新的云中 例如 房间地板上有球体的场景将返回地板和墙壁 但不是球体 因为它不是平面的 如何扩展下面的代码以获得所有飞机 而不仅仅
  • 内部版本号中的分支名称

    我试图将分支名称放入内部版本号中 但找不到正确的参数 我正在使用内部版本号格式 teamcity build branch 0 它可以工作 但是当它尝试构建默认分支 dev 时 teamcity 将其命名为
  • 如何在 osgi 中从字节反序列化对象

    在我的 osgi 应用程序中 我有三个包 travel api table api and utils travel api依赖于取决于table api这取决于utils 注意travel api不直接依赖于utils 我使用 aQute
  • x86 上哪个写屏障更好:lock+addl 或 xchgl?

    Linux 内核使用lock addl 0 0 esp 作为写屏障 而 RE2 库使用xchgl 0 0作为写屏障 有什么区别 哪个更好 x86 也需要读屏障指令吗 RE2 将其读屏障函数定义为 x86 上的无操作 而 Linux 将其定义
  • 是否可以使用 JavaScript 中的对象文字定义动态命名的属性? [复制]

    这个问题在这里已经有答案了 考虑以下 var a foo bar 相当于 var a a foo bar 相当于 var a a foo bar 相当于 var a var b foo a b bar 是否可以做类似的事情 var b fo
  • 在 Android 上将画布保存为位图

    我在将画布的内容放入位图中遇到一些困难 当我尝试执行此操作时 文件大小约为 5 80KB 但它似乎完全是空的 每个像素都是 000 画布上绘制了一系列由手写形成的相互连接的线条 下面是我的视图的 onDraw 我知道它阻塞了 UI 线程 不
  • JavaScript YAML 解析器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个 JavaScript YAML 解析器 它将 YAML 转换为 HTML 页面中可用的内容 我在 Github 上尝试过这个版本 h
  • 默认在 Sublime Text 3 中将程序编译为 c++ 14

    我知道我们可以使用 g 编译器将程序编译为 C 但g 编译器默认为98版本 要将其作为 C 14 运行 我们需要添加 std c 14在终端 Sublime Text 因其轻量级和功能而被认为是竞争性编程中有价值的编辑器 在这些比赛中 时间
  • 使用 Rails 4 将自定义字段/列添加到 Devise

    我正在尝试添加一个full name字段 列到我的用户模型 使用devisegem 和 Rails 4 网上大部分例子推荐使用 attr accessible 但听起来在 Rails 4 中应该以不同的方式处理这个问题 我该如何添加full
  • 分配二进制常量

    有没有办法将二进制值赋给 VB 变量 所有显而易见的选择都不起作用 我尝试过添加前缀 B 附加b但似乎没有任何作用 我寻找它的运气也不好 我不need这适用于我的应用程序 但我只是好奇 所以不需要替代解决方案 编辑 为了澄清起见 我正在寻找
  • 使用 colspan 设置 下 的宽度

    我想设置宽度td in tbody在下面thead具有colspan 2 具有硬定义的列宽 以 为单位 浏览器外壳不会动态调整表格宽度 sample width 100 table layout fixed sample td nth ch
  • java: wait()、notify() 和同步块

    我了解到调用对象的wait 方法将释放对象监视器 如果存在 但我有一些关于打电话的问题notify 另一个线程在此对象上 如果另一个 第三个 线程同时拥有对象监视器 何时 等待线程会醒来吗 如果第三个线程调用 等待线程会被唤醒吗wait 在
  • Ant 中出现“无法创建任务或输入 antlib:org.apache.maven.artifact.ant:mvn”错误

    运行 ant 任务时 Ant 构建无法运行build xml 我在控制台中收到以下错误 Buildfile F Eclipse Projects my project build xml typedef Could not load def
  • 在 Angular 中同步调用一个又一个的可观察对象

    我可以拨打以下服务电话 产品服务 GetAllProducts 产品服务 删除产品 产品服务 GetCategories 产品服务 DeleteCategory 在 sudo 代码中 我需要在组件中执行以下操作 使用productServi