【问题标题】:What is the correct interpretation of this arrow function subscribing an Observable in Angular?这个在 Angular 中订阅 Observable 的箭头函数的正确解释是什么?
【发布时间】:2019-04-17 06:15:39
【问题描述】:

我正在关注 Angular 官方教程:https://angular.io/tutorial/toh-pt4

如您所见,有一个订阅服务的组件类:

import { Component, OnInit } from '@angular/core';

import { Hero } from '../hero';
import { HeroService } from '../hero.service';

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  selectedHero: Hero;

  heroes: Hero[];

  constructor(private heroService: HeroService) { }

  ngOnInit() {
    this.getHeroes();
  }

  onSelect(hero: Hero): void {
    this.selectedHero = hero;
  }

  getHeroes(): void {
    this.heroService.getHeroes()
        .subscribe(heroes => this.heroes = heroes);
  }
}

我对这个组件的getHeroes()方法有些疑惑:

 getHeroes(): void {
    this.heroService.getHeroes()
        .subscribe(heroes => this.heroes = heroes);
  }

我知道我的服务返回一个Observable<Hero[]>,我必须订阅它,因为它是异步的。

我唯一不能完全理解的是内部表达式(我认为它称为 lambda),这个: heroes => this.heroes = heroes

这个表达的确切含义是什么?

【问题讨论】:

标签: angular typescript arrow-functions angular-observable


【解决方案1】:

你是对的,它确实是一个 lambda,但是它们在 js 中更常被称为箭头函数。它们的功能相同。

那个 lambda 等于:

(function (heroes) { return _this.heroes = heroes; });

所以它需要一个参数,然后将其存储在本地属性中。

你的 sn-p 中的 Observable 也可以写成:

this.heroService.getHeroes()
   .subscribe((heroes: Hero[]) => {
      this.heroes = heroes;
   });

哪个更清楚它返回的内容。

【讨论】:

  • 好吧,也许我有一些知识差距。参考您的代码:作为此函数参数传递的英雄是谁?是 Observable 准备好后“返回”的数组吗?
  • @AndreaNobili “它是 Observable 准备好后“返回”的数组吗?” - 这是 100% 正确的。另请参阅我的更新,这可能是一个更清晰的示例。
  • 所以我的解释是:服务返回一个 Observable。当它完成时,它会发出 Hero[] 数组,该数组是函数(heroes)的英雄参数。这种解释正确吗?
  • @AndreaNobili 我不确定这是否会有所帮助,但我在之前的一篇关于 Observables 的文章中做了这个例子。 stackblitz.com/edit/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多