2017-05-11 14 views
0

私の角度サービスが観測可能に戻ります。しかし、私がそれを購読するたびに、それは再び全部呼び出されています。この特定の例では、複数のオブザーバーで1回ではなく、10回ユーザーを取得する要求が送信されていることがわかります。RxJsで既存の観測可能なものを購読する

期待される動作:観察可能に作成し、購読します。 1つの要求のみが送信され、すべてのサブスクリプションは同じ値を受け取ります。

@Injectable() 
class ExampleService { 
    constructor(private http: Http) { } 
    read() { 
    return this.http.get('https://api.github.com/users'); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 

     <button (click)='test()'>Test</button> 
    </div> 
    `, 
}) 
export class App { 
    name:string; 
    subscription: Observable<any>; 

    constructor(private exampleService: ExampleService) { 
    this.name = `Angular! v${VERSION.full}` 
    } 

    test() { 
    for (let x = 0; x < 10; x++) { 
     if (this.subscription) { 
     console.log('Using existing subscription'); 

     this.subscription.subscribe(
      response => { 
      console.log('From another') 
      }) 
     } else { 
     this.subscription = this.exampleService.read(); 
     this.subscription.subscribe(
      response => { 
      console.log('From originalSubscription'); 
      this.subscription = null; 
      }); 
     } 

    } 
    } 

} 

ヘルプがありますか?

答えて

1

このお試しください:

@Injectable() 
class ExampleService { 
    constructor(private http: Http) { } 
    read() { 
    return this.http.get('https://api.github.com/users').publishReplay().refCount(); 
    } 
} 
+0

'.publishReplay()参照カウントを();' 'それは.share'と同等ではないですか。 – Maxime

+1

閉じる、 'share'エイリアス' .publish()。refCount() 'http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-share – subhaze

関連する問題