2017-05-02 1 views
1

の観察可能な表現に発射しませ購読します。それは、このような巨大な表現、ひいてはgetJSON引数で繰り返しだ理由です)Angular2/rxjs:私は基本的な方法を持っているサービスがあるmergeMaps&forkJoins

assignAndReturnだけです:

private assignAndReturn<T1, T2>(name: string) { 
    return (a: T1, b: T2) => { 
    a[name] = b; 
    return a; 
    }; 
} 

0123これに対してはが機能していないようです。それは、表現の木の途中でしか得られないように見えます。

私は本当に何が起こっているのか分かりません。それはほとんど私が '内部'の部分に加入する必要があるかのようですが、外部の定期購読は発射されません...

答えて

0

flatMapを利用して、このようなパターンを試すことができます。前のイベントが終了すると、flatMapはそのコールバックによって返されたObservableで継続します。読みやすさにかなり役立ち、途中でストリームを偵察することができます。

import { Observable } from 'rxjs'; 

class Demo { 
    backend = { 
     // Simulated request 
     getJSON: (str, demoValue) => Observable.of(demoValue).delay(new Date(Date.now() + 1000)) 
    } 

    getBook(name) { 
     this.backend 
      // Get the book 
      .getJSON(`${name}/book`, name) 
      // Get the parts 
      .flatMap(book => { 
       // Observable.from() will create an observable event 
       // for each item in the array 
       return this.backend 
        .getJSON(`[Next URL]`, [`${book}/part1`, `${book}/part2`]) 
        .flatMap(parts => Observable.from(parts)); 
      }) 
      // Get the sections 
      .flatMap(part => { 
       return this.backend 
        .getJSON(`[Next URL]`, [`${part}/section1`, `${part}/section`]) 
        .flatMap(sections => Observable.from(sections)); 
      }) 
      // Get the chapters 
      .flatMap(section => { 
       return this.backend 
        .getJSON(`[Next URL]`, [`${section}/chapter1`, `${section}/chapter2`]) 
        .flatMap(chapters => Observable.from(chapters)); 
      }) 
      // etc. 
      .subscribe(console.log) 
    } 
} 

let t = new Demo(); 
t.getBook('cool'); 

この出力:

cool/part1/section1/chapter1 
cool/part1/section1/chapter2 
cool/part1/section2/chapter1 
cool/part1/section2/chapter2 
cool/part2/section1/chapter1 
cool/part2/section1/chapter2 
cool/part2/section2/chapter1 
cool/part2/section2/chapter2 
+0

私はあなたがで取得しているかを見るが、私は本当に本自体のように(観測可能から放出されるだろう、むしろ私がしたいの章、より本の構造の一部である)。私はobservableを返すメソッドが本を返すようにしたいだけです。その前にいくつかのフィールドを再帰的に '解決'する必要があるだけです。 –

+0

特に、完全に形成される前に、この本が観測可能なものから放出されることは望ましくありません。私はリゾルバから 'getBook(name)'を購読していますが、データがロードされるまでページを読み込まないようにします。 –

+0

上記の構造をとり、 '.toArray()'を最後に追加することができます。これにより、前に進む前にすべての結果が配列に集められます。魔女の後には、あなたはそれを再結合するために '.map(...)'を使うことができます。 – Graztok

関連する問題