簡體   English   中英

RxJS承諾鏈

[英]RxJS Promises Chaining

我對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項時,是否總是觸發訂閱的主Stream?

並且,如果可能的話,如何僅在subStream完成時如何訂閱subStream來觸發已訂閱的mainStream?

我認為您正在尋找forkJoin運算符。

const streamC = streamA
  .flatMap(payloads => Rx.Observable.forkJoin(payloads));

streamC.subscribe( results => /*An array containing the results from all payloads*/);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM