2016-12-05 30 views
1

我注意到在我的角度應用程序中,rxjs運算符(如switchMap,map等)無法正常工作。 (我的IDE也給出了一個提示。)可以肯定,我運行了下面的代碼。如果我用subscribe替換switchMap,我確實在控制檯中看到'返回值'。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的錯誤或已完成的通知,它必須首先向該操作員訂閱該Observable。

一個Observable被稱爲一個「冷」Observable,如果它沒有開始發射項目直到觀察者訂閱它;如果Observable在任何時候可能開始發射物品,則它被稱爲「熱」Observable,並且訂戶可以在其開始之後的某個點處開始觀察發射物品的順序,錯過了之前發射到訂閱時間的任何物品。

編號:http://reactivex.io/documentation/operators/subscribe.html

+0

你不一定需要調用'subscribe'發出值,當你調用任何類似'switchMap'運營商。 http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-switchMap – Naveed

+1

@Naveed正如我在我的答案中所說,如果你不訂閱可觀察的,它將保持冷靜,它不會與觀察員有聯繫。因此,你將無法「觀察」任何東西。檢查您提供的鏈接中的示例。我承認在文檔中使用emit是有點令人困惑,但'switchMap'只是將這些值映射/發射到observables,但如果這些observables沒有觀察者,則無法看到/觀察任何東西。 – echonax

+1

好的。我明白了。 'switchMap'和'map'返回我需要訂閱的另一個observable。 – Naveed

相關問題