Angular 2 - .http - 为什么我需要.subscribe到.map或.switchMap以使console.log工作?

Jim*_*tor 2 dictionary observable angular

我有一个基本组件,试图从中获取数据Params.但是我注意到如果我失踪了,我的调试代码通常不会起作用.subscribe().如果.subscribe()在此示例中已注释掉,则Got Params??不会打印到控制台.

this.route.params
  .switchMap((params: Params) =>{
    console.log("Got params??");
    console.log(params);
    // params['filename'])
    return 'cat';
  })
  .subscribe(data=>{
    console.log(data);
  })
Run Code Online (Sandbox Code Playgroud)

更多代码:

import { Component, OnInit } from '@angular/core';
import { Http } from '@angular/http';
import { Router, ActivatedRoute, Params } from '@angular/router';

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';


export class ParsedFileComponent implements OnInit {

  parsed: any;
  constructor(
    private http: Http,
    private route: ActivatedRoute 
  ) {      }
Run Code Online (Sandbox Code Playgroud)

似乎内部的代码.switchMap()没有被执行,除非它订阅了

dlc*_*ozo 7

这是因为Observables默认是Cold,它们需要手动触发,在这种情况下需要使用该subscribe()方法.

还有另一种类型的观测量的,他们会通过其他的事情被触发,如async角管,在这种情况下你不需要的subscribe()方法.

如果你想要一个完整的答案,检查一下,如果你发现它有用,请选择该答案.