簡體   English   中英

有條件地進行下一個mergeMap? [rxjs.Observable]

[英]Proceeding conditionally to the next mergeMap? [ rxjs.Observable]

我想使用管道、地圖、合並地圖來轉換我嵌套的 Observables 但是在某些條件之后我希望它繼續進行

observableFunction是一個循環遍歷數組的 Observable,一旦它完成,您就可以繼續使用操作過的數據

observableFunction(par1,par2)
.subscribe((resp) => {
  i++;
 //do stuff, manipulate resp   
  const lastIteration = someArray.length == i;

  if (lastIteration) {
   //do stuff
   observableFunction(par1a, par2a)
      .subscribe((resp) => {
        observableHandleFunction(resp)
          .subscribe((handledData) => {
            h++;
            const lastIterationSub = someNestedArray.length == h;

            //do stuff, manipulate handledData

            if (lastIterationSub) {
              console.log("done");

          });
      });
  }
});

如何通過使用本場景中要使用的 rxjs 功能進行轉換,使其看起來更容易閱讀? 喜歡將條件應用於mergeMap?

observableFunction(par1,par2)
 .pipe(
    mergeMap((res1) => {
       //do stuff
       CONDITION={
         return observableFunction(par1a,par2a)
       }
    }),
    mergeMap((res2) => return observableHandleFunction(res2))
 )
 .subscribe((res3) => {
        h++;
        //do stuff
        const lastIterationSub = someNestedArray.length == h;

        if (lastIterationSub) {
          console.log("done");

        }
});

使用類似這樣的解決方案,它不會在條件下工作,導致錯誤

首先,嵌套subscribe塊總是一個壞主意。

如果您的observableFunction發出單個值(而不是一次發出整個數組),並且完成后它發出一個完整的值,則可以使用toArray運算符。 所以:

observableFunction(par1,par2)
.pipe(toArray())
// Here you will have an array of items, now you can proceed with something like:

observableFunction(par1,par2)
  .pipe(
    toArray(),
    mergeMap(array => {
    // If neccesary you can do the same here etc
    }))

暫無
暫無

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

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