angular 2 Observable完全没有调用
发布时间:2020-12-17 07:10:32 所属栏目:安全 来源:网络整理
导读:我正在玩角度2教程的英雄应用程序,现在我有这个组件 import { Component,OnInit } from '@angular/core'import { Subject } from 'rxjs/Subject';import { Hero } from "./hero";import { Router } from "@angular/router";import { HeroService } from "./h
我正在玩角度2教程的英雄应用程序,现在我有这个组件
import { Component,OnInit } from '@angular/core' import { Subject } from 'rxjs/Subject'; import { Hero } from "./hero"; import { Router } from "@angular/router"; import { HeroService } from "./hero.service"; import { BehaviorSubject } from "rxjs/BehaviorSubject"; @Component({ selector: 'hero-search',templateUrl: 'app/hero-search.component.html',styleUrls: ['app/hero-search.component.css'],}) export class HeroSearchComponent implements OnInit{ heroes: Hero[]; isLoading: BehaviorSubject<boolean> = new BehaviorSubject(false); error: any; private searchNameStream = new Subject<string>(); constructor( private heroService: HeroService,private router: Router ) {} ngOnInit() { this.searchNameStream .debounceTime(400) .distinctUntilChanged() .switchMap(name => { this.isLoading.next(true); return this.heroService.getHeroesByName(name) }) .subscribe( heroes => this.heroes = heroes,error => this.error = error,() => { console.log('completed'); this.isLoading.next(false); }) } // Push a search term into the observable stream. search(Name: string): void { this.searchNameStream.next(Name) } gotoDetail(hero: Hero): void { let link = ['/detail',hero.id]; this.router.navigate(link); } } 问题是,如果我理解正确,订阅需要三个回调参数.subscribe(success,failure,complete);.但就我而言,完整的部分永远不会被执行.我想这与switchMap的工作原理有关.我对吗? 解决方法
searchNameStream永远不会完成,因此从switchMap获取的observable也不会完成.
每次searchNameStream发出一个事件时,都会调用heroService.getHeroesByName(),并且“inner”observable发出的所有事件都被“outer”observable重新发送,直到searchNameStream发出一个新事件,并且这个过程重复.您订阅了外部observable,只有在searchNameStream完成时才会完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |