Ой, подожди. Если вы хотите вызвать его из компонента, то это по-другому. Я обновляю свой ответ.

я есть приложение Angular 5, в котором мне нужно вызвать какой-то тяжелый REST-сервис (обычно это занимает несколько секунд). Мне нужен его результат в другой части приложения, поэтому я хотел бы сохранить результат в DataStorageService. В принципе, это я хотел бы добиться:

@Injectable()
export class DataStorageService {

private result: MyCustomObject;

constructor(private service: Service) {}

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

Вопрос в том, как мне дождаться завершения HTTP-запроса, а затем сохранить и вернуть объект «результат». Я пытался решить ее, используя Promise и Observable, но ни один из них не работал нормально.

Наблюдаемое:

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

Promise:

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

Ответы на вопрос(2)

Ваш ответ на вопрос