[英]Chaining observables in RxJS from an array into functions
我有一個情景,那里有一組值。
對於這些變量中的每一個,我都希望調用一個可觀察對象,但是僅在之前的可觀察對象完成之后。
還有更多的“ RxJS”方法可以執行以下操作嗎?
let num = 0;
let myObs = new Observable(observ => {
observ.next(1);
})
let content=['x','y','z'];
myObs.subscribe(data => {
let i = 0;
let that = this;
let inlineFunc = function(){
if ( i < content.length){
that.gen(num).subscribe(() => {
i++;
inlineFunc();
});
}else{
observer.next(doc);
}
};
inlineFunc();
});
gen(num:number) : Observable < any >{
return num*num;
},
如果要連續且重復地調用observable
則可以使用Observable.expand()
。
假設您有一系列內容:
let content=['x','y','z'];
對於內容中的每個值,您都想調用gen()
函數,該函數返回一個Observable:
gen(num: number): Observable<any> {
return Observable.of(num * num);
}
你能做的是
let myObs = Observable.of(1);
let num = 0;
let content = ['x','y','z'];
const gen = (num: number): Observable<any> => {
return Observable.of(num * num);
}
myObs
.expand(()=>{
return gen(num);
})
.skip(1)
.take(content.length)
.subscribe(x=>console.log(x));
說明:
.expand()
將反復調用該函數傳遞給自身(作為第一個參數),直到您要求他停止。 在這種情況下,它將調用gen()
(返回一個可觀察的)
.skip(1)
將跳過第一個發射,其中myObs
是可觀察到的值1。
.take()
將永遠.expand()
。 它所做的只是重復content
的長度。
.subscribe()
以獲取結果。
評論 :您將獲得以下輸出:
0
0
0
0
因為您的num
為0。我假設gen()
只是一些虛函數,您將用一些返回真實有意義數據的Observable代替。
工作中的JSBin
您可以先使用from運算符獲取一個可觀察的值,然后再使用reduce,
Observable.from([...values])
.reduce( this.reducingFn, 1 )
reductionFunction是一個接受2個參數的函數,第一個是起始值(這是reduce函數中的第二個參數),第二個是外部流發出的當前值(values數組中的每個值)
// somewhere in you class
reducingFn( accumulatedValue, value){
return accumulatedValue * value
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.