2017-05-18 13 views
1

私のアプリケーションには無限のスクロールセクションがあります。これを達成するために、私はthis componentを使用してスクロールイベントを処理します。スクロールがdivの下部に到達すると、私は関数を呼び出してより多くのデータを取得しています。ここまでは順調ですね。角2 - RxJSスイッチマップの問題

この機能をより効率的にするには、データが正しく処理されることを確認するだけでなく、呼び出しが行われるまで数秒待つことを試みています。これを行うために、私はAngular website that showcases a wikipedia searchに示されている例を見てきました。

私が記事に示されているものと同様のセットアップを持って、私の問題は、私はswitchMap()を呼び出すときに、私は次のエラーを取得していますということです。

Type 'void' is not assignable to type 'ObservableInput<{}>'

これは私のコードのサンプルです:Tからenter image description here

この上記のコードでは
private scrollEndActive: Subject<boolean> = new Subject<boolean>(); 

ngOnInit() { 
    ... 
    this.scrollEndActive 
     .debounceTime(1000) 
     .distinctUntilChanged() 
     .switchMap(data => { 
      // ... get data from server 
     }) 
} 

... 

// event to trigger call to server 
scrollEnd() { 
    this.scrollEndActive.next(true); 
} 

は私が取得していますものです私が研究したことは、Observable(Type 'void' is not assignable to type 'ObservableInput<{}>')を返さなければならないという事実に関連する問題であるように思えます。しかし私の場合は、何が問題なのか分かりません。

は、私が働いている:

  • アンギュラ4.0.1
  • 活字体2.2.2
  • RxJS 5.2.0デフォルトで
+0

あなたは 'Observable'を返さなければなりません。何が問題なのですか? – yurzui

+0

私はこの時点まで何を返す必要があるのか​​分かりません...トリガーされたときに 'Subject'に作用すると思われるコードはすべて、' Observable ' –

+3

'.switchMap(data => { return Observable.of(null) })'インポート'を忘れないでください。rxjs/add/observable/of ';'しかし、それは単なるスタブです。私はあなたが実際に観察したいと思うと仮定します – yurzui

答えて

5

、矢印機能() => {...}はリターンを持っています何かを返さない限り、voidと入力してください。

switchMapを使用して返信したい場合は、yurzuiがコメント内で言ったように、return Observable.empty()とすることができます。あなたはswitchMapにヌルの観察可能なを返す場合

は言われていること、それはあなたがswitchMapを必要としない、あなたは直接返されたデータを変更せずにアクションをdoesnのdo演算子を、使用できることを意味します。またはmergeMapを使用すると、元のデータから取得した新しいObservableを返すことができます。

+0

' Observable.of(null) 'の代わりに' Observable'が必要です。空() ' – jayphelps

+0

ああ、そうだよ:) – Supamiu