Я работаю над проектом Angular 7 и столкнулся со странной проблемой, которая потребовала у меня довольно много времени, чтобы определить, но я не знаю, почему это происходит, и я надеюсь, что вы, ребята, сможете мне помочь.Я создал сервис с помощью angular-cli, а затем реализовал его следующим образом:
import {Injectable} from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {forkJoin, Observable} from "rxjs";
import {map} from "rxjs/operators";
@Injectable({
providedIn: 'root'
})
export class SampleService {
constructor(private http: HttpClient) {
}
save(sample: Sample): Observable {
return this.http.post("http://localhost:3000/samples", sample).pipe(map(this.parser));
}
saveAll(samples: Sample[]): Observable {
return forkJoin(samples.map(this.save))
}
private parser = (value): Sample => new Sample(value.name);
}
export class Sample {
name: string;
constructor(name: string) {
this.name = name;
}
}
Я установил точку останова для каждого метода.Когда я запускаю его, я получаю следующее:
![First breakpoint stop](https://i.stack.imgur.com/100FO.png)
Как вы видите, все выглядит нормально в первой точке останова, поэтому давайте перейдем к следующей.
![Second breakpoint stop](https://i.stack.imgur.com/Ij8x9.png)
Теперь все не определено, и я получаю следующую ошибку в консоли:
ERROR TypeError: Cannot read property 'http' of undefined
Если я изменю эту строку:
forkJoin(samples.map(this.save))
до
forkJoin(samples.map(sample => this.save(sample)))
При повторном запуске кода.Я получаю:
![Third breakpoint stop](https://i.stack.imgur.com/FEgML.png)
И теперь, кажется, все в порядке, и код работает просто отлично.Как Java-разработчик, в аналогичной ситуации первый способ сопоставим со ссылкой на метод, и он будет работать просто отлично, почему в TypeScript это не так?