【问题标题】:Can't subscribe because return value is AnonymousSubject instead of Observable无法订阅,因为返回值是 AnonymousSubject 而不是 Observable
【发布时间】:2018-03-15 03:18:07
【问题描述】:

我在 Angular 4 中遇到问题,试图在点击“用户链接配置文件”时从特定用户那里获取详细信息。

但是我不能订阅我的函数,因为 switchMap 的返回值是 AnonymousSubject 而不是 Observable:

    ngOnInit() {
    this.route.paramMap.switchMap((params: ParamMap) => this.getHero(+params.get('id')))
      .subscribe(hero => {
        this.hero = hero;
      })
  }

这里是 getHero 函数:

  getHero(id: number) {
     return this.getHeroes().find(hero=>hero.id===id);
  }

getHeroes() 函数返回简单的 json 数据对象,其中包含英雄的详细信息(id 和名称)。

感谢您的任何帮助/建议!

【问题讨论】:

  • 你能发布你的 getHeroes 方法吗?它是否返回一个数组?
  • @LLai ye 它的简单返回 HeroList ,也就是一个对象数组
  • switchMap 期望您返回一个可观察的、承诺的、数组或可迭代的。您的 getHero 方法正在返回一个对象。尝试让它返回一个带有对象值的 observable。 return Observable.of(this.getHeroes().find(hero=>hero.id===id));
  • @LLai 非常感谢你!!!这解决了我缺乏知识:)
  • 很高兴我能帮上忙!我会发布一个答案,以便将来人们更容易找到

标签: javascript angular typescript observable


【解决方案1】:

switchMap 期望您返回 Observable、Promise、Array 或 Iterable。您的 getHero 方法正在返回一个对象。尝试让它返回一个带有对象值的 observable。

getHero(id: number) {
    let hero = this.getHeroes().find(hero=>hero.id===id);
    return Observable.of(hero);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多