我先上代码,问题的话我写在了对应的代码上边
heroes: Hero[];
getHero(id: number): Observable<Hero> {
/**其实就是这段代码出现了问题,我调用的inMemoryDataService的个体DATa方法之后,获取到的是一个Observable数据流,但是为什么后边进行订阅之后我在console.log中输出的this.heroes是undefined呢*/
this.inMemoryDataService.getData().subscribe(heroes=>this.heroes=heroes);
console.log(this.heroes);
return of(this.heroes.find(hero => hero.id === id));
}
这是inMemoryDataService中的getData方法
getData():Observable<Hero[]>{
let api ='http://localhost:8888/net/user/getUserList';
return this.http.get<Hero[]>(api) .pipe(
catchError(this.handleError<Hero[]>('getHeroes', []))
);
}
查过了好多资料,总感觉这个地方是因为线程出的问题,可是也不知道应该怎么解决,各位好汉,救救孩子吧!
解决了
getHero(id: number): Observable<Hero> {
this.messageService.add(`测试数据2`);
/**
* 首先我们在这里是可以获取到this.inMemoryDataService.getData()返回的Observable对象的
* 但是却获取不到其中的heroes
* 认为可能有两种情况导致
* 1.同一个Observable对象好像不能被订阅两次,但是这里应该是第一次被订阅
* 2.线程不一致导致没有获取到这里的信息,可是在后续的操作中又获取到信息了
*/
return this.inMemoryDataService.getData().pipe(map(heroes=> heroes.find(hero => hero.id === id)));
将方法中的代码改成这个样子就可以了