Redux rxjs发出并行请求,并等待其中一个请求发出后完成和更新

Redux rxjs发出并行请求,并等待其中一个请求发出后完成和更新,redux,rxjs,rxjs5,Redux,Rxjs,Rxjs5,我的要求是,当我使用CombineTest操作符时,我有两个端点,一个端点到HondaCars列表,另一个端点到PeugoetCars列表,它不会等待另一个流完成 在这里,我的需求=>第一次等待,直到两个源流都收到一个值,然后在这之后,在两个源流中的一个都收到一个值之后刷新 编辑 因此,经过一段时间的搜索,我坚持使用combinelatetest,但诀窍在于: this.loading = Observable.combineLatest( myFirstObservableIndicati

我的要求是,当我使用
CombineTest
操作符时,我有两个端点,一个端点到HondaCars列表,另一个端点到PeugoetCars列表,它不会等待另一个流完成

在这里,我的需求=>第一次等待,直到两个源流都收到一个值,然后在这之后,在两个源流中的一个都收到一个值之后刷新

编辑

因此,经过一段时间的搜索,我坚持使用
combinelatetest
,但诀窍在于:

this.loading = Observable.combineLatest(
  myFirstObservableIndicatingIfFirstHttpReqEnded,
  mySecondObservableIndicatingIfSecondHttpReqEnded
).map(d => d.some(t => t === true));
所以现在,用户只看到微调器,直到所有请求都完成,即使两个观察值中的一个已经发出了一些值


为了澄清,我有两个LoadingReducer来处理每个observable的加载逻辑,因此在我的例子中,我这样做是为了知道两个http调用何时完成,您需要首先使用
observable.forkJoin()
,然后使用
.switchMap()
将observable切换到
observable.CombineTest()

注意
这个.hasreqend
只是我创建的一些伪变量。诀窍是您需要将this.hasreqend的值写入两次:一次在switchMap(forkJoin之后),另一次在subscribe(subscribe),它位于可观察的.combineLastest()之后

或者,您可以有两个观察值:一个是
forkJoin
,另一个是
combineLatest()
,您可以订阅这两个观察值并相应地更新变量


这里有一个Http调用是有限流:它发出值并完成。 第一部分:“第一次等待,直到两个源流都收到一个值”

第二部分:“在两者之一收到值后刷新”

我们需要将一些无限流(例如一些用户操作)转换为“HondaCars”或“PeugoetCars”流,可以通过“.switchMap”:

因此,如果我们想在某个动作后立即发出一个流:

Rx.Observable.combineLatest(
  someUserAction1$
      .startWith(null) // we need to make initial call, but we have no user action yet, fix it )
      .switchMap(()=>this.httpService2.get())$,

  someUserAction2$
      .startWith(null)
      .switchMap(()=>this.httpService2.get())$
);

Complete对可观察事物有非常具体的含义。大理石图会让你的情况更清楚。无论如何,听起来你想要的实际上是
combineLatest
:“为了确保输出数组始终具有相同的长度,
combinelateest
将实际等待所有输入观测值发出至少一次”你能用你已经尝试过的更新你的问题吗?@Jota.Toledo好的,我会用我所做的更新我的问题
const initial$ = Rx.Observable.forkJoin(
   this.httpService1.get(),
   this.httpService2.get()
);
const stream1$ = someUserAction1$
  .switchMap(()=>this.httpService1.get());
Rx.Observable.combineLatest(
  someUserAction1$
      .startWith(null) // we need to make initial call, but we have no user action yet, fix it )
      .switchMap(()=>this.httpService2.get())$,

  someUserAction2$
      .startWith(null)
      .switchMap(()=>this.httpService2.get())$
);