如何等待订阅完成并从函数返回值?

问题描述 投票:0回答:1

我有以下服务

export class DataService {
  private jsonFormData$: BehaviorSubject<FormData>;
  private jsonPath: string;

  constructor(private http: HttpClient) {}

  getJsonFormData(): Observable<FormData> {
    if (!this.jsonFormData$) {
      this.loadJsonFormData();
    }
    return this.jsonFormData$.asObservable();
  }

  private loadJsonFormData() {
    this.http.get(this.jsonPath).subscribe((formData: any) => {
      this.jsonFormData$.next(formData);
    });
  }
}

我从一个组件中调用它,如下所示

this.dataSvc.getJsonFormData().subscribe((formData: any) => {
      this.jsonFormData = formData;
      console.log('const', this.jsonFormData);
    });

但是,它始终未定义为可从服务中观察到

return this.jsonFormData$.asObservable();

我希望如何加载可观察值然后返回值。

angular
1个回答
0
投票

首先初始化你的BehaviorSubject,然后检查它是否没有值,然后调用api。

对于前任。

export class DataService {
  private jsonFormData$: BehaviorSubject<FormData> = new BehaviorSubject(null);
  private jsonPath: string;

  constructor(private http: HttpClient) {}

  getJsonFormData(): Observable<FormData> {
    if (!this.jsonFormData$.getValue()) {
      this.loadJsonFormData();
    }
    return this.jsonFormData$.asObservable();
  }

  private loadJsonFormData() {
    this.http.get(this.jsonPath).subscribe((formData: any) => {
      this.jsonFormData$.next(formData);
    });
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.