Для этого вы можете воспользоваться switchMap
.
Примерно так:
import { of } from 'rxjs';
import { tap } from 'rxjs/operators';
.....
export class DropDownService {
private dockerURL;
constructor(private infoService: InfoService){
}
getStructureType(): Observable<StructureType[]> {
return this.getDockerURL().pipe(
switchMap(url => {
return this.http.get<StructureType[]>(url+'/structureType');
}),
);
}
private getDockerURL(): Observable<string> {
if (this.dockerURL) {
return of(this.dockerURL);
} else {
return this.infoService.getVersion().pipe(
// tap is an operator that is used for side effects, every time this stream emits, we assign it to this.dockerURL. Should only be once.
tap(url => this.dockerURL = url),
);
}
}
}
Таким образом, он гарантирует заполнение dockerURL
перед выполнением HTTP-вызова.