2016-12-05 83 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

相关问题