2017-10-16 3 views
0

私は観測可能な質問があります。 たとえば、私たちはAPIを持っており、そこにreguestを送信します。観測可能 - ダイナミックリクエストのキューを作成する(アングル4)

this.http.get('https://swapi.co/api/people/').subscribe(peoplesData => { 
    let peoples = peoplesData.json(); 
    let nextPage = peoples.next; // https://swapi.co/api/people/?page=2 
    this.peoples = peoples.results; 
}); 

を私が最初の要求を送信すると、私は次の要求(この例では、URLが「NEXTPAGE」に含まれている)のURLを取得します。 私はすべてのリクエストを行うメソッドを作成する必要があり、すべてのリクエストが 'this.peoples'にすべての結果を追加するたびに必要です。 私は、.mergeMapとswitchMapはそれに合っていないと思います。 Observableでもっとexpirienceがありますか?この方法で私を助けてください。

私は.expandでこの問題を解決し 更新:

return this.http.get('https://swapi.co/api/people/') 
     .expand(peoplesData => { 
     let peoples = peoplesData.json(); 
     if (peoples.next) { 
      return this.http.get(peoples.next); 
     } else { 
      return Observable.empty(); 
     } 
     }) 
     .map(peoples => peoples.json()); 
+0

限り私はあなたのポストにここで、唯一の問題を見ることができるように「あなたよりObservablesでもっと経験がありますか?」また、リンクの有効期限が切れているため、リンクが不良です。編集して、リンクされたコードplzを追加します。 –

+1

@ TheHeadRush、ありがとう。私は自分の投稿を編集し、例を追加しました。観察可能な方法を選択する手助けをしてもらえますか? –

+0

これを見てください:https://stackoverflow.com/questions/38712121/angular2-nested-http-requests –

答えて

0

rxjs RxのflatMapを使用して私の解決策:

import {Observable} from 'rxjs/Rx'; 


ngOnInit() { 
    const arrayIds = [2456, 12456, 456, 7899]; 
    this.doUsersRequest(arrayIds); 
} 

doUsersRequest(queryArr, previousObservable = null) { 
     if (queryArr.length) { 
      const url = 'api/users/id/' + queryArr.shift(); 
      let observable = null; 
      if (previousObservable) { 
       observable = previousObservable.flatMap(() => { 
        return this.http.get(url); 
       }); 
      } else { 
       observable = this.http.get(url); 
      } 
      return this.doUsersRequest(queryArr, observable); 
     } else { 
      return previousObservable; 
     } 
    } 
関連する問題