[英]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.