Llamada HTTP síncrona angular 5

Tengo una aplicación Angular 5 en la que tengo que llamar a algún servicio REST pesado (generalmente toma algunos segundos). Necesito su resultado en una parte diferente de la aplicación, por lo que me gustaría almacenar el resultado en un DataStorageService. Básicamente, esto es lo que me gustaría lograr:

@Injectable()
export class DataStorageService {

private result: MyCustomObject;

constructor(private service: Service) {}

getResult(): MyCustomObject {
    if (typeof this.result === 'undefined') {
        // save result
    }
    return result;
}

La pregunta es cómo puedo esperar hasta que finalice la solicitud HTTP y luego guardar y devolver el objeto 'resultado'. Traté de resolverlo usando Promise and Observable también, pero ninguno de ellos funcionó bien.

Observable:

if (typeof this.result === 'undefined') {
    this.service.call()
        .subscribe(response => this.result = response);
}
return this.result;  // wait for save and return MyCustomObject

Promesa:

if (typeof this.result === 'undefined') {
    this.service.call()
        .toPromise()
        .then(response => this.result = response);
}
return this.result;  // wait for save and return MyCustomObject

Respuestas a la pregunta(2)

Su respuesta a la pregunta