「已注销」 2019-08-02 13:23 采纳率: 0%
浏览 925

使用angular的时候,subscribe监听不到observable的对象是为什么?恳求大神指点!

我先上代码,问题的话我写在了对应的代码上边

  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', []))
           );
    }

查过了好多资料,总感觉这个地方是因为线程出的问题,可是也不知道应该怎么解决,各位好汉,救救孩子吧!

  • 写回答

1条回答 默认 最新

  • 「已注销」 2019-08-02 14:05
    关注

    解决了

     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)));
    

    将方法中的代码改成这个样子就可以了

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮