Обрабатывать данные после http получить запрос в угловых - PullRequest
0 голосов
/ 08 марта 2019

У меня есть служба, которая запрашивает данные у метода get, я хотел бы отобразить ответ на объект, хранящий некоторые идентификаторы, и использовать эти идентификаторы для выполнения других http-запросов. Мне сказали, что это обычно не делается в режиме обратного вызова, я посмотрел на это Как я могу вернуть ответ от асинхронного вызова? , но я не думаю, что это обычный способ реализации служб, любой советы очень ценятся.

Попытка добавления метода onInit / constructor в angular, чтобы убедиться, что объект был заполнен до того, как другие методы были вызваны без успеха.

@Injectable ()
export class ContactService  {
   storeIds;

   getIds(callback: Function) {
   this.http.get<any>(IdsUrl, Config.options).subscribe(res => {
       callback(response);
   });

   getIds(res => {
        this.storeIds = {
          profileId: res.profile,
          refIds: res.refIds
        }
     }
   )

   // this.storeIds returns undefined as it's an async call
   this.http.post<any>(WebserviceUrl + this.storeIds.profileId , data, headers )

   // .....Many other web services that relay on this Ids
}

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Просто создайте другой сервис под названием StoreIdsService.Обновите ответ, который вы получите от своего первого вызова API 'getIds' в StoreIdsService.Идея состоит в том, чтобы StoreIdsService служил одноэлементным сервисом для сохранения состояния ваших storeIds.Вы можете внедрить StoreIdsService в любой компонент, где хотите получить storeIds.

Это один из многих способов обмена данными между компонентами в угловом формате.

Пожалуйста, обратитесь к этому ответу, который кто-то опубликовал.

Как обмениваться данными между компонентами вУгловой 2?

0 голосов
/ 08 марта 2019

Вы можете просто назначить службу response свойству storeIds в методе subscribe. и позвоните в последующие службы внутри него, если вам нужно.

@Injectable ()
export class ContactService  {
   storeIds;

   getIds() {
   this.http.get<any>(IdsUrl, Config.options).subscribe(res => {
       this.storeIds = {
          profileId: response.profile,
          refIds: response.refIds
        }

      this.otherapicall1();
      this.otherapicall2();
   });

}
...