Angular: переменная-член не определена внутри функции - PullRequest
1 голос
/ 10 марта 2020

У меня есть следующий сервис, в котором есть функция, которая возвращает Observable, поскольку она берет данные из другого сервиса, преобразует их и затем возвращает (как Observable).

@Injectable({
  providedIn: 'root'
})
export class ReportColumnHeaderService {

  constructor(private companyService: CompanyService) {}

  public getColumnHeaderElements(variableDimensions: string[]): Observable<HeaderElement[]> {

    return Observable.create(function(observer) {

      this.companyService.getCompanies( (companies: Company[]) => {
        let headerElements = getHeaderElements(companies);
        observer.next(headerElements);
        observer.complete();
      });

    });

  }
}

Проблема в том, что что this.companyService не определено в function. Я прочитал, что это возможно, если я использую => так:

return Observable.create((observer)  => {

   this.companyService.getCompanies( (companies: Company[]) => {
   let headerElements = let headerElements = getHeaderElements(companies);
   observer.next(headerElements);
   observer.complete();
  });

});

Но этот код не компилируется. Там написано Expected 0 arguments, but got 1. Может кто-нибудь подсказать, как решить проблему?

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Предполагая, что getCompanies возвращает наблюдаемое, вы упускаете subscribe в функции. Правильный вызов дан ниже:

this.companyService.getCompanies().subscribe( (companies: Company[]) => {
0 голосов
/ 10 марта 2020
  this.companyService.getCompanies( (companies: Company[]) => {
        let headerElements = getHeaderElements(companies);
        observer.next(headerElements);
        observer.complete();
      });

Если вы хотите получать данные из сервиса, вам нужно использовать подписку. Лучший пример - создать константу в методе или переменную publi c. Например,

companies: Company[];


this.companyService.getCompanies.subscribe((res) => {
                this.companies = res;
                console.log(this.compmanies)
                /** this is just simple exemple */            
              });

Подписка на наблюдаемые Помните, что наблюдаемые ленивы. Если вы не подпишитесь, ничего не произойдет. Полезно знать, что когда вы подписываетесь на наблюдателя, каждый вызов метода subscribe () запускает собственное независимое выполнение для данного наблюдателя. Звонки по подписке не делятся между несколькими подписчиками на одну и ту же наблюдаемую. https://medium.com/@luukgruijs / понимание создания и подписки на наблюдаемые в angular -426dbf0b04a3

И, конечно, если вы создаете подписку, не забывайте отписываться.

...