Вы попадаете в блокпост, где большинство разработчиков застревают, когда впервые знакомятся с концепцией асинхронного программирования и реактивного программирования. У вас есть некоторый метод, getRewardServices
, который возвращает некоторое Observable
, на которое подписывается ваша служба, и выполняет обратный вызов для каждого элемента, который излучает эта наблюдаемая (вы можете прочитать больше здесь ). Ключевая проблема в этой строке:
return {service_type: this.service_type, donations: this.donations, betting: this.betting, services: this.services}
, которая может быть выполнена до того, как наблюдаемое испустит объект пользователя. Надлежащим способом решения этой проблемы будет сопоставление наблюдаемого с объектом, который вы хотите вернуть, и возвращение самого наблюдаемого. Внешняя служба / компонент будет отвечать за развертывание наблюдаемого и обработку асинхронного события. Как то так:
getReward(): Observable<any> {
return this.apiService.getRewardServices().pipe(
map(user => {
if (user.status == 200) {
this.service_type = user.data.service_type;
this.donations = user.data.donations;
this.betting = user.data.betting;
this.services = user.data.services;
return {service_type: this.service_type, donations: this.donations, betting: this.betting, services: this.services}
}
return some_other_error_value;
});
}