2017-02-21 2 views
2

У меня есть базовый компонент, который пытается получить данные из Params. Однако я заметил, что мой код отладки часто не работает, если мне не хватает .subscribe(). Если в этом примере было отмечено .subscribe(), Got Params?? не будет напечатано на консоли.Угловая 2 - .http - Зачем мне нужно подписываться на .map или .switchMap для работы console.log?

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

Подробнее Код:

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 
) {  } 

Кажется, что код внутри .switchMap() не не выполняется, если его подпиской на

+1

Это по дизайну, потому что, если ничто не заботится о результате наблюдаемого, то зачем вообще запускать его? Кажется, я не могу найти сообщение об этом, но в этой статье упоминается: https://blog.thoughtram.io/angular/2016/06/16/cold-vs-hot-observables.html – Adam

ответ

5

Это происходит потому, что Наблюдаемые являются холодной по умолчанию , их необходимо запускать вручную, в этом случае с помощью метода subscribe().

Там еще один тип в наблюдаемых Горячие те, они будут вызваны другой стороны, как async трубы угловой, в этом случае вам не нужен метод subscribe().

Если вы хотите получить полный ответ об этом, отметьте this, пожалуйста, поддержите этот ответ, если найдете его полезным.

+1

Укажите, что не так если вы дадите ответ, чтобы мы могли учиться. –

Смежные вопросы