2017-02-08 10 views
3

rxjscombineLatestメソッドで問題が発生しました。 combineLatestcombineLatestに呼び出そうとしていますが、Observableオブジェクトが返されても動作しません。問題を解決するためにお手伝いください。 console.logは異なるファイル内のすべてのオブザーバー、実際combineLatestのcombineLatestを呼び出してください

と呼ばれることはありませんので、私は解決this.search$

this.services$から
this.search$ = store.select('search'); 

this.services$ = Observable.combineLatest(
    store.select('currentRegions'), 
    store.select('services'), 
    (regions, services) => { 
     // some filter here 
     return services; 
    } 
); 

this.autocomplete$ = Observable.combineLatest(
    this.search$, 
    this.services$, 
    (search, services) => { 
     console.log('show me, please'); 
     return ''; 
    } 
); 

を移動することはできません。これは、任意の加入者なしでは動作しませんので、私は購読していました

+1

の一種であるobservables' 'のほとんどは、その "冷たい" と言われていますあなたがそれらを作成すると、あなたがそれを購読するまで実行されないことを意味します。 – Maxime

答えて

2

オペレータは、すべてのソースObservableが少なくとも1つの値を出力したときに値を送出します。

したがって、console.log(...)が印刷されない場合は、this.search$またはthis.services$は決して何も放出しないことを意味します。つまり、store.select('currentRegions'),store.select('services')またはstore.select('search')のいずれかが決して値を放出しないことを意味します。

startWith()startWith(null)でさえ)を使用できます。

これは動作します:https://jsbin.com/gecede/2/edit?js,console

これは動作しません:https://jsbin.com/livafar/2/edit?js,console

+0

しかし、console.logを 'this.services $'コールバックに書き込むと、どんな編集でもうまく動作します – Hyper

+0

@Hyperあなたの状況をシミュレートするべき2つの例で私のアップデートを見てください。 – martin

1

RxJS CombineLatestはAngularJS $ q.all

import 'rxjs/add/observable/combineLatest'; 


Observable 
     .combineLatest(this.store.select('currentRegions'), this.store.select('services') 
     .do(console.log) 
     .subscribe(); 
関連する問題