RxJS承诺链接

时间:2016-02-09 11:48:50

标签: javascript promise reactive-programming rxjs

我对RxJS很新。所以我有一个为不同的ajax调用创建有效负载的流,然后我使用flatMap来检索我需要的数据,它工作正常。容易。

const streamA = Rx.Observable.from(array);

const streamB = streamA
  .map( val => /* build payload */ )
  .flatMap( payload => Rx.Observable.fromPromise($.ajax(payload))

streamB.subscribe( result => /* got it */)

现在我将为每个项目创建一个有效负载数组,但问题是,现在当我订阅流时,我会收到每个请求,但是在完成时我只返回初始元素。

const streamC = streamA
  .flatMap( payloads => {
    return Rx.Observable.from(payloads)
      .flatMap( payload => Rx.Observable.fromPromise($.ajax(payload))

streamC.subscribe( result => /* executed for every payload */)

我尝试使用groupBy返回正确的分组数组并向我展示我可以链接Observable,但我仍然无法弄清楚如何正确地订阅观察者来实现元素。

const streamWLF = streamA
  .flatMap( payloads => {
    return Rx.Observable.from(payloads)
      .flatMap( payload => Rx.Observable.fromPromise($.ajax(payload))
      .groupBy((obs) => obs.key, (obs) => obs)

streamWLF.subscribe( result => {
  result.subscribe(/* did my magic here*/);
})

所以我的问题是,这是最好的方法吗?

当接收到子流项目时,主流订阅是否总是被触发?

并且,如果可能,我如何订阅subStream以仅在subStream完成时触发订阅的mainStream?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找forkJoin运营商。

ListFolderAsync