网站搜索

typescript - Angular:函数内成员变量未定义


我有以下服务,它有一个函数返回一个 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();
  });

});

但是那段代码无法编译。它显示 预期 0 个参数,但得到了 1 个。 有人能给我提示如何解决这个问题吗?

答案#1

假设 getCompanies 返回一个可观察对象,你在该函数上缺少 subscribe。正确的调用如下所示:

this.companyService.getCompanies().subscribe( (companies: Company[]) => {

答案#2

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

如果你想从服务获取数据,你需要使用订阅。最好的方法是在方法中或作为公共变量创建你的常量。例如

companies: Company[];


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

订阅可观察对象 请记住,可观察对象是惰性的。如果你不订阅,什么也不会发生。值得注意的是,当你订阅一个观察者时,每次调用 subscribe() 都会触发该观察者的独立执行。对同一个可观察对象的多个订阅者而言,订阅调用是不会共享的。 https://medium.com/@luukgruijs/understanding-creating-and-subscribing-to-observables-in-angular-426dbf0b04a3

当然,如果你创建了订阅,不要忘记取消订阅。