Какова правильная интерпретация этой функции стрелки, подписывающей Observable в Angular?

Я следую официальному руководству по 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[]>, на который я должен подписаться, потому что он асинхронный.

Единственное, что я не могу полностью понять, это внутреннее выражение (кажется, оно называется лямбда), это: heroes => this.heroes = heroes

Каков точный смысл этого выражения?


person AndreaNobili    schedule 14.11.2018    source источник
comment
Это функция стрелки, это обратный вызов.   -  person jonrsharpe    schedule 14.11.2018
comment
developer.mozilla.org/en-US/docs/ Интернет/JavaScript/Справочник/   -  person Chellappan வ    schedule 14.11.2018


Ответы (1)


Вы правы, это действительно лямбда, однако в js они чаще называются стрелочными функциями. Они функционируют одинаково.

Эта лямбда равна:

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

Таким образом, он ожидает параметр, а затем сохраняет его в локальном свойстве.

Observable в вашем фрагменте также может быть написано:

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

Что яснее того, что он возвращает.

person Zze    schedule 14.11.2018
comment
Ладно, может у меня пробел в знаниях. Ссылаясь на ваш код: какие герои передаются в качестве параметра этой функции? Это массив, возвращаемый Observable, когда он готов? - person AndreaNobili; 14.11.2018
comment
@AndreaNobili Это массив, возвращаемый Observable, когда он готов? - это правильно на 100%. Пожалуйста, также смотрите мое обновление, которое может быть более наглядным примером. - person Zze; 14.11.2018
comment
Итак, моя интерпретация такова: служба возвращает Observable‹Hero[]›. Когда он завершится, он выдаст массив Hero[], который является параметром героев функции (heroes). Верна ли эта интерпретация? - person AndreaNobili; 14.11.2018
comment
@AndreaNobili Я не уверен, что это будет вообще полезно, но я сделал этот пример для поста ранее о Observables. stackblitz.com/edit/ - person Zze; 14.11.2018