2016-12-05 19 views
1

,mapなどのrxjsオペレータが動作していないことに気づきました。 (私のIDEもそれについてのヒントを示しています。)確かに、私は次のコードを実行しました。 switchMapsubscribeに置き換えると、コンソールに「値が返されました」と表示されます。rxjsオペレータがangular2で動作していない

なぜ演算子が動作していないのですか?

import { Component, OnInit } from '@angular/core'; 
import {Observable} from "rxjs/Observable"; 
import 'rxjs/add/operator/switchMap'; 

@Component({ 
    selector: 'page-2', 
    template: ` 
    <h2>{{title}}</h2> 
    `, 
}) 
export class Page2Component implements OnInit{ 
    title = 'Page2'; 

    ngOnInit() { 
     let obs = new Observable(observable => { 
      observable.next('value returned'); 
     }); 
     obs.switchMap(console.log); 
    } 
} 

答えて

2

観察可能物を「発射する」ためには、それを購読する必要があります。さもなければ彼らは「寒い」のままになります。

サブスクリプション演算子は、オブザーバをObservableに接続する接着剤です。オブザーバブルが発行するアイテムをオブザーバが見るために、またはオブザーバブルからエラーまたは完了した通知を受け取るためには、最初にこのオペレータでオブザーバブルを購読する必要があります。

オブザーバブルは、オブザーバがサブスクライブするまでアイテムを放出しない場合、「コールド」Observableと呼ばれます。 Observableは、いつでもアイテムを放出し始める可能性があり、加入者は、そのサブスクリプションの開始時点から放出されたアイテムのシーケンスの観察を、サブスクリプションの時点までに放出されたアイテム。

参考:http://reactivex.io/documentation/operators/subscribe.html

+0

あなたは、必ずしもあなたがswitchMap' 'のような演算子のいずれかを呼び出すときに値を発するように' subscribe'を呼び出す必要はありません。 http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-switchMap – Naveed

+1

@Naveedあなたが観測可能なものを購読していないと私の答えで言ったように、それは寒さに耐えられますが、それはその観察者とのつながりを持たないでしょう。したがって、あなたは何かを "観察"することはできません。あなたが与えたリンクの例をチェックしてください。私はemitを使用することが認められていますが、ドキュメントはちょっと混乱しますが、 'switchMap'はこれらの値をobservablesにマッピング/送信しますが、これらのobservablesにオブザーバがない場合は、 – echonax

+1

わかった。 'switchMap'と' map'は私が購読する必要がある別の観測可能なものを返します。例えば、 – Naveed

関連する問題