问题标签 [mergemap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
202 浏览

typescript - 通过 promise 可观察到的过滤器数组

我有

  • 对象数组
  • 一个函数permission(obj): Promise<boolean>

如何按承诺过滤此数组?

我尝试了很多东西,我得到的最接近的是

但这似乎是不必要的复杂。

我曾希望我可以做得更简单of(arr).pipe(filterByPromise(permission)),但似乎无法弄清楚如何。

我做了一个 Stackblitz https://stackblitz.com/edit/rxjs-g1u8yk

StackBlitz 代码

0 投票
1 回答
100 浏览

angular - Angular 8 - 在 MergeMap 中分配类属性

我正在使用 MergeMap 在我的 Angular 8 应用程序中进行嵌套的 http 调用。但是,我的要求是在 MergeMap 中分配我的模型的属性,如下面的代码所示。

当然,mergeMap 中编写的代码不起作用,TypeScript 显示的错误是“Type void is not assignable to type 'ObservableInput'”。

我的要求是将用户对象的ID属性分配给进行第二次 http 调用的 BlogComment 对象的UserId属性帖子。

0 投票
2 回答
728 浏览

arrays - 在 RxJs 中,如何在按顺序返回结果数组的同时在合并图中执行序列?

我有一个可以将消息分解为多个消息块的功能。我需要将这些消息发布到我的发布功能。但是我不希望 Observable 阻止其他传入的帖子。我的解决方案是合并映射中的 concat 运算符的某种组合,但我似乎无法让它正常工作

我不确定我是否可以制作图表,但这是我的尝试:

我需要请求 1 在 2 之前 3 和 4 之前 5 和 6 之前执行。用英语我想我会有一个可观察的可观察对象,我希望它映射到可观察的流,然后映射到每个可观察的输出流的标准数组. 我只是不确定如何做到这一点。很长一段时间以来,我一直在搞乱代码,试图将我刚才所说的概念化,这是我最好的尝试:

我的输出:

我觉得我接近一个解决方案,但我无法弄清楚如何将它完全合并到一个数组中。我也不知道它在功能上是否正确。

0 投票
2 回答
1696 浏览

angular - NgRx 效果 mergeMap 方法

我有两个相同效果的实现,并且都有效。我很难理解两者之间的区别,哪个更“正确”。

请在下面找到它们:

选项 1. IDE 无法确定instance最后一个map.

选项 2。所有类型都有效且有意义。这对我来说更正确,但我想弄清楚并理解这些差异。

0 投票
1 回答
236 浏览

javascript - 从服务器发送请求的合并映射错误

我有一个角度应用程序,我正在通过服务调用进行发布请求。

但我得到一个错误。但是服务调用会发送请求。所以这是一个非常具有误导性的错误。

这是我的方法:

因此,如果我执行 service methdod: createSubmissionBatch 那么它可以工作。但我仍然收到此错误:

当然,我首先搜索了这个错误。但我只发现与其他东西相关的andswares,比如这个answare:

TypeError:您在预期流的位置提供了无效对象。您可以提供 Observable、Promise、Array 或 Iterable

0 投票
2 回答
103 浏览

angular - 合并地图 Angular

你能告诉我我做错了什么吗?

我收到此错误:“OperatorFunction”类型上不存在属性“订阅”

0 投票
2 回答
1663 浏览

angular - Rxjs mergeMap:Concat 2 相关的 Api 请求

我有两个 api 请求,第二个取决于第一个。第一个请求获得一个包含 3 个设施的数组。在此之后,我需要为每个设施做一个 api 请求以获取我需要的图像。我需要设施的 uuid。我认为使用mergeMap 可以很容易做到这一点。但是我有 2 个问题并且找不到解决方案:在合并映射中,我认为服务将是数组的一项服务,但它是整个数组。此外,我还需要订阅 getImage() 并将值存储在 service.image 中。

0 投票
2 回答
506 浏览

angular - 顺序订阅多个服务调用

我必须进行 2 次 api 调用,我希望第一次调用完成,然后第二次调用按顺序开始。第二次通话对第一次通话没有任何依赖性。这两个调用都会更新数据库。如果我使用下面的代码,则会多次更新第二次调用,因为它正在尝试多次更新相同的记录,我希望避免。任何帮助表示赞赏。

0 投票
2 回答
1529 浏览

rxjs - 在发出自定义值之前等待 mergeMap 中的所有 observables 完成

我想同时使用处理一个可观察对象列表,flatMap然后在处理所有内部可观察对象时发出一个空值。有没有一种优雅的方式来实现这一点,即使用单个运算符?

这是示例:

我知道我可以使用toArray()last()等待所有内部可观察对象完成,但随后我需要使用map()运算符将​​其转换为空值(如我上面的示例所示)。

我想,我正在寻找具有以下语义的运算符:emit X when source observable completes,例如:

0 投票
2 回答
156 浏览

meteor - 如何将mergeMap内部订阅限制为N个最新或滑动窗口队列

我有一个从两个流合并的源流。当源流发出事件时,我想调用订阅函数Meteor.subscribe并保持打开状态,所以我使用mergeMap. 当订阅准备好时,我通过管道连接到另一个mergeMap来填充数据。它运行良好,直到我点击 100 次并且内存消耗猛增。问题是,如何限制mergeMap,不是限制在前N 个订阅concurrent: Number,而是限制到最近的N 个订阅,就像滑动窗口一样?

我想更详细地解释该代码中发生的事情。

在我的示例中,只要我单击 Web 界面中的按钮,源流(前管道)就永远不会完成,因此当我单击界面中的下一个或上一个按钮时它会发出更改。首先从源流中获取更改并将它们发送到后端 API(也有冲突的命名发布/订阅)。因此,当客户端上的数据可用时,我调用移动到第二个,但我无法销毁或停止流星的订阅。两个原因:1.我想实时更改所选数据,2.如果我停止流星的订阅,客户端的数据将被删除。因此,如果它在服务器上更新,那么现在它会不断更新选定的数据merge mergeMapobserver.next(subscription)mergeMap mergeMap

因此,在每个 UI 按钮单击(下一个、上一个)之后,我都有新的订阅链。如果原始数据表不大(1000 条记录)并且我只是单击了几次,那没关系。但是,我可以拥有超过 30000 个,并且可以多次单击我的按钮。

所以,我们的想法是让 mergeMap 像一个大小有限的队列,只保存最后 N 个订阅,但是当我单击按钮时,队列一直在变化。

最后编辑:工作代码: