У меня есть служба, которая запрашивает данные из метода 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
}
Вы хотите цепочку удаленных вызовов после получения ответа от вызова getIds? Я не понял эту часть. Или вы хотите куда-то поместить полученный ответ, чтобы использовать его для будущих вызовов API. Можешь прояснить?
Я хочу сохранить эти идентификаторы где-нибудь для будущих вызовов API, без необходимости вводить кучу обратных вызовов для доступа к ним.
Вы собираетесь делать все эти звонки из службы контактов или из других служб? Я просто хотел знать, хотите ли вы, чтобы эти данные ответа находились вне службы контактов?
Да, намерение состоит в том, чтобы вызвать его из других служб как «this.myService.postSomething(data, callback)» с уже существующим идентификатором
Просто создайте еще одну службу с именем StoreIdsService. Обновите ответ, полученный от вашего первого вызова API getIds в StoreIdsService. Идея состоит в том, чтобы использовать StoreIdsService как одноэлементную службу для сохранения состояния ваших storeId. Вы можете внедрить куда угодно, чтобы получить storeId.
Хотя ответ удовлетворяет тому, что я искал, моя реальная проблема заключалась в том, что я неправильно настроил ответ, у меня было res => myObject = {id: res.id, id2: res.id2, ....}, и мне нужно было использовать Object.assign() или с оператором распространения :)





Вы можете просто назначить службу 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();
});
}
Просто создайте еще одну службу с именем StoreIdsService. Обновите ответ, полученный от вашего первого вызова API getIds в StoreIdsService. Идея состоит в том, чтобы использовать StoreIdsService как одноэлементную службу для сохранения состояния ваших storeId. Вы можете внедрить StoreIdsService в любой компонент, в котором хотите получить идентификаторы storeId.
Это один из многих способов обмена данными в angular между компонентами.
Пожалуйста, обратитесь к этому ответу, который кто-то опубликовал.
в чем твоя проблема? с какой проблемой вы столкнулись в какой строке вашего кода?