2016-09-16 24 views
2

ストリームを変数として保存し、それを3回購読します。複数のApiリクエスト

私は最初に想像したように、アクションを実行し、最後にデータを取得して、誰もがその1つのアップデートを取得します。これは、すべてのサブスクライバに対してアクションを実行するため、この場合は多くのAPIコールを意味するため、間違っていました。件名を作成してそれをオブザーバーに登録し、誰かにこの件名を登録させると、それは機能します。 残念ながら、私はここRPで何が起こっているのか説明できますか?

答えて

0

ここで遭遇する問題は典型的なものです。その動作は、デフォルトではrxjsストリームが「寒い」という事実に起因しています。これは、すべての加入者がプロデューサーを新たに開始することを意味します。したがって、繰り返します。被験者は「熱い」ので、反復を観察しないという事実です。

ストリームの温度のメタファーを理解するには、ストリームをより多く使用するほどこれらの問題を処理する必要があります。

:ここを見て、同様の質問について

this.listStream = Observable 
      .interval(this.refreshInterval) 
      .do(() => console.log('call the api 3 times')) 
      .map(i => fruitApiStream) 
      .startWith(fruitApiStream) 
      .flatMap<FruitDto[]>(s => s) 
      .map<Fruit[]>(
      s => s.map(s => { 
       return new Fruit(s.fruitId, s.name); 
      })) 
      .share(); 

(と答え):

簡単な修正はshare演算子を使用することです熱い寒さのよりよい理解はここに見てください:

科目の詳細については

、およびその意味、あなたはここで見ることができます:

+0

は、あなたの答えをありがとう! – user1693057

関連する問題