问题标签 [concatmap]

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 回答
465 浏览

java - RxJava 2 - 在 concatMap 中减少队列

我有一个发出一些数据的主题。然后我想修改队列中的这个数据(长操作)。但是当另一个主题会发出其他东西时,我想减少我的队列

otherSubject现在,如果这些元素尚未被concatMap(它们仍在队列中)消耗,我想修改我的一次性以跳过由(3 和 4)发出的元素。

有可能实现吗?

PS: PublishSubject 不是必需的 - 它只是为了简单起见

0 投票
0 回答
1204 浏览

unit-testing - 在单元测试中模拟 Observable concatMap 函数(Angular 5)

编辑:我想通了,问题是spyOn它会监视返回的函数undefined,需要and.callThough显式调用。

我正在尝试测试我的组件,它使用 ngrx 商店。我在这样的单元测试中存根我的商店:

meetup-view.component.spec.ts

问题是,在我的组件中,我使用 concatMap (并使用导入它import 'rxjs/add/operator/concatMap';

meetup-view.component.ts

当我运行我的单元测试时,我总是得到这个错误:Cannot read property 'concatMap' of undefined. 我已经尝试导入concatMap我的单元测试,但没有运气。现在已经搜索了几个小时:(。

0 投票
1 回答
259 浏览

java - onCompleted 在处理 RxJava concatMap 之前提前调用

我有两个 observables 并使用 concatDelayError 进行顺序处理。

我的问题是 onNext 和 onCompleted 在处理之前被提前调用。我如何知道所有处理都已使用 concatDelayError 完成?

伪代码:

我正在使用带有 autoConnect() 的回复()并订阅回复主题,因为我需要共享单个订阅。

0 投票
0 回答
315 浏览

android - Android rxJava 对来自 Observable (map, flatMap, concatMap) 的结果执行操作

可能的 Duplicate RxJava 对列表执行操作并返回一个 observable

我对 rxJava 很陌生。我想要实现的是从数据库中获取数据,ArrayList并对ArrayList. 我想在一个 rxjava 调用/代码中完成所有这些。以下是我从工作正常的数据库中获取项目列表的代码。

我想要的是对后台线程中的每个列表项执行一些操作并生成最终列表。为此,我必须进行另一个 rxjava 调用,如下所示:

但我想在一个电话中完成这两项任务。从数据库中获取项目列表,然后对列表的每个项目执行后台任务,最后返回一个列表。我已经阅读过mapflatMapconcatMap不知道如何在这种情况下使用它。目前我已经能够编写这段代码,但不知道它是如何工作的

0 投票
1 回答
169 浏览

java - .concatMap() 启动下一个 Observable 但前一个还没有完成

我在 Android 上使用 RxJava。我在这里有一段非常简单的代码: Observable> observable =

我想做的事=>

我实际上得到了什么:

但是我认为 concatMap 正在等待第一个 observable 结束,然后再启动下一个 ...?

0 投票
2 回答
2480 浏览

kotlin - Using concatMap to run a Single before running another observable

The signature of the fetchMessage in Java

The kotlin code

The method I want to run before fetchMessage

I want the insertMessage e to somehow run before the fetchMessage. I was thinking of using concatMap but not sure how to combine the translate and insertMessage. So that the insertMessage will run first then once completed the translate will run.

Many thanks for any suggestions,

By changing the return to Single for the translate method. I have done like this:

Then I can have a method to do the following insertMessage(..) -> translate(..):

Would that be an ideal solution?

My returning a Observable and calling toObservable() in the chain.

And I can use concatWith so the sequence would be insertMessage(..) -> translate(..):

Are these correct solutions?

0 投票
3 回答
8774 浏览

angular - Angular - RxJS ConcatMap - 从两个服务调用返回数据

可能是一个基本问题,但我有一个 Angular 应用程序,它调用后端服务来检索一些数据,然后使用该数据进行另一个后端服务调用。

第二个服务调用依赖于第一个成功完成,所以我使用了 RxJS 的 concatMap() 函数。

但是,我下面的代码仅返回第二次服务调用的数据。我需要从两个服务调用返回的所有数据。

有一种感觉,我搞砸了 .pipe 调用,但没有取得太大进展。提前致谢。

0 投票
1 回答
54 浏览

angular - 在 RxJs 中同步不同的方法调用和返回响应

我有一种方法可以从数据库中获取联系人数据。

this.getContact("联系人");

获得所需的输出后,我想借助以下方法将其放入 Json 存储中:

this.local.saveRecord("联系人", c);

一切完成后,我想借助以下方法从存储中获取保存的数据:

this.local.getRecordList("联系人")

这三个操作应按顺序执行以返回给调用者。为了实现这一点,我尝试了以下代码:

但是我得到的响应总是空的。我对 RxJs 运算符不太熟悉。如果需要,我们甚至可以跳过第二步,直接从数据库中获取数据。我应该使用不同的运算符来解决问题吗?还是我应该以不同的方式思考?帮助表示赞赏。提前致谢。

0 投票
1 回答
1578 浏览

angular - rxjs concatMap 似乎没有被调用

第二个concatMap没有被调用。

有任何想法吗?

0 投票
1 回答
287 浏览

angular - 如何在每个请求之前通过检查顺序发送请求?

我需要:

  • 依次发送 N 个请求(我使用 concatMap 来执行此操作)
  • 仅当对象有效时(我使用验证码扩展 concat 映射)
  • 在第一个错误时停止队列(通过服务器错误响应或客户端检查拒绝)

现在代码看起来像:

这是堆栈闪电战: https ://stackblitz.com/edit/angular-5vwbjg

所以我想要的是在对象无效时不发送请求。并且我想next从最初的 observable 处理 id,只有在处理先前的处理结束的情况下。所以我想要这样的流程:

  1. 第一个 id 上的 map + concatMap
  2. 第二个id上的map + concatMap
  3. 更多更多更多...

我只通过扩展 concatMap 代码来处理这个问题。是否有可能在concatMap? 所以concatMap身体会更简单。

我尝试了 mergeMap 运算符,例如:

我在控制台中得到了这个:

在此处输入图像描述

这不是正确的结果。我预计 3 个请求,然后 1 个错误。预期结果:

在此处输入图像描述

在我的情况下,也许还有更漂亮的方式来描述检查功能?有任何想法吗?没有那个if有2个分支。

我认为我误解了这一点。from(this.ids)无论如何都会发出值。它不等待concatMap或映射或任何其他运算符。在那一刻,当新值发出时from(this.ids)(它将在concatMap完成之前),它会处理整个链:map+ concatMap。我需要的是在concatMap完成第一个处理后以某种方式说 rxjs 来处理第二个发出的值。concatMap然后它应该在处理完第二个等之后处理第三个发出的值。

一个扩展的例子在这里:https ://stackblitz.com/edit/angular-ovffm4?file=src/app/app.component.ts

在这里,我有 2 个客户端检查和 1 个服务器响应。

这是我在控制台中看到的:

如何更改我的可观察对象,使其类似于: