2016-10-28 12 views
0

に、私は次のコードを持っている:2角度 - ラン2のサブスクリプション同時に

//Subscription 3: role ID to role Name 
     af.database.object('/roles/'+businessRole.$value) 
     .subscribe((roleData) => { 
     //Subscription 4: Get user info 
     af.database.object('/users/'+businessRole.$key).subscribe(user => { 

サブスクリプション内のサブスクリプションが含まれています。

ここでの問題は、アプリケーションが2番目のアプリケーションを実行する前に最初のアプリケーションを待っていることです。私は一度に両方を実行し、それぞれの結果を得たいと思います。私はそれをどのようにすることができますか?私はrxjs

  • と私はPromise.All()を使用して、各観察可能な結果を​​取得する方法を見つけることができなかったことを行うことができます方法を知っているのが大好きだ

    1. 私は前Promise.All()を使用してきた

      が、

    私はObservable.forkJoinはあなたがあなたの状況で使用する必要が正確に何であると考えているおかげ

  • 答えて

    1

    これは、1000msと900ms後に完了するObservableを2つ作成します。このデモを実行すると、最初のものが実行された直後に最初のものが完了したことがわかります。

    let obs1 = Observable.of('HTTP Response 1').delay(1000); 
    let obs2 = Observable.of('HTTP Response 2').delay(900); 
    
    console.log('Start'); 
    
    obs1.merge(obs2) 
        .subscribe(val => console.log(val), undefined,() => console.log('Completed')); 
    

    はライブデモを参照してください:http://plnkr.co/edit/hzmpclxDkIhnfTYcWXd5?p=preview

    これは、コンソールに出力します。

    Start 
    HTTP Response 2 
    HTTP Response 1 
    Completed 
    

    あなたがforkJoin()が必要な場合は、その後、私の前の回答Observable.forkJoin() doesn't executes :)を参照してください。

    +0

    どのように観測データの出力を得るのですか? 'val'は各観測可能な出力を持つ配列ですか? – TheUnreal

    +0

    @TheUnreal 'merge()'演算子は引数として取得したすべてのObservableから値を出します。したがって、応答ごとに '.subscribe()'のコールバックが呼び出されます。 – martin

    +0

    それぞれの出力を取得して使用する必要があり、この 'merge'メソッドを使用して、どの出力がどの出力を返すのかを判断できないので、問題です。間違っていますか?例えば、最初の観測データを 'user'変数に、2番目の観測データを' role'変数に格納する必要があります。 – TheUnreal

    4

    これはあなたのコードはforkJoinを使用してのようにどのように見えるかです:

    Observable.forkJoin(
    this.http.get('/roles/'+businessRole.$value).map((response: Response) => res.json()), 
    this.http.get('/users/'+businessRole.$key).map((response: Response) => res.json()) 
    ).subscribe(data => { 
        data[0] // this will contain roleData 
        data[1] // this will contain user 
    }, 
    error => console.log(error)); 
    

    Thisは、あなたが観測とどのようにforkJoinを使用する方法についての詳細を学ぶことができる便利なリンクです。

    +0

    私は以前の投稿で試しました。http://stackoverflow.com/questions/40303012/observable-forkjoin-doesnt-executes – TheUnreal

    +0

    偉大な答え:) –