РЕДАКТИРОВАТЬ: См. Ответ Курта Гамильтона для решения.
Я звоню API, чтобы вернуть значения некоторых настроек в settings.service.ts. В settings.component.ts их необходимо вернуть для заполнения формы - он отображает загрузку, когда вызов API еще не завершен.
Он работает с функцией return of (fakeData). Тем не менее, я не могу понять, как вернуть 'realData'.
Вместо console.log (realData) я хочу вернуть это вместо fakeData.
Некоторая помощь была бы хороша, заранее спасибо!
Ниже приведены соответствующие части кода.
settings.service.ts:
export interface Settings {
setting1: boolean;
setting2: string;
}
const fakeData = {
setting1: true,
setting2: 'test'
};
@Injectable()
export class SettingsService {
defaultSettings: DefaultSettings[];
constructor(private apiService: ApiService) { }
loadSettings(): Observable<Settings> {
this.apiService.getDefaultSettings().subscribe( defaultSettings => {
// defaultSettings is needed for when value1 or value2 is 'null'
// not implemented yet, but therefore this nested subscription structure
this.defaultSettings = defaultSettings;
const value1 = this.apiService.getSpecificSetting('setting1');
const value2 = this.apiService.getSpecificSetting('setting2');
forkJoin([value1, value2]).subscribe( result => {
const realData = {
setting1: result[0],
setting2: result[1],
};
console.log(realData);
// return of(settingsFound); not possible here ...
});
});
return of(fakeData);
}
}
settings.component.ts
settings: Observable<Settings>;
ngOnInit() {
this.settings = this.settingsService.loadSettings().pipe(
tap(settings => {
this.settingsForm.patchValue(settings);
})
);
}