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