簡體   English   中英

將RxJS中的可觀察對象從數組鏈接到函數

[英]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));

說明:

  1. .expand()將反復調用該函數傳遞給自身(作為第一個參數),直到您要求他停止。 在這種情況下,它將調用gen() (返回一個可觀察的)

  2. .skip(1)將跳過第一個發射,其中myObs是可觀察到的值1。

  3. .take()將永遠.expand() 它所做的只是重復content的長度。

  4. .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.

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