「已注销」 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)));
    

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

    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献