Я не знаю, как сформулировать этот вопрос.
У меня есть компонент Angular, который должен вызывать метод класса обслуживания. Этот метод должен вызвать метод http через мою собственную службу http, а затем что-то сделать с результатом.
Но тогда компонент также должен что-то делать в ответ на вызов службы. Итак, у меня есть что-то вроде следующего псевдокода:
В компоненте:
public doSomethingInService(payload: any): void {
this.myService.doSomething(payload);
// I also need to do something with the result!
}
В эксплуатации:
public doSomething(payload: any): void {
this._httpService.doGet(url).subscibe((result) => {
// do something with the result
});
}
Хорошо, теперь у компонента никогда нет шансов сделать свое дело.
То, что я пробовал:
- Пусть сервисный метод doSomethingInService () возвращает наблюдаемое вместо пустого. Таким образом, я могу реагировать как на условия успеха, так и на ошибки. Проблема: если он просто возвращает наблюдаемое, которое мне дает метод doGet () httpService:
public doSomething(payload: any): Observable<any>{
return this._httpService.doGet(url);
// I never get a chance to react the doGet result
}
... тогда у метода сервиса doSomethingInService () никогда не будет возможности выполнить свою задачу с результатом.
Пусть сервисный вызов doSomething () возвращает наблюдаемое, но не то, что из метода httpService doGet (). Таким образом, метод службы все еще может подписаться на наблюдаемую функцию httpService doGet () и что-то делать с результатом, но поскольку он сам возвращает наблюдаемое, компонент может подписаться на это и выполнить свою работу с результатом. Я просто не знаю, как это кодировать.
Пусть метод doGet () httpService возвращает не наблюдаемое, а субъект. Тогда я мог бы подключить двух наблюдателей: (1) метод doSomething (), который его вызвал, и (2) компонент. Опять же, я просто не могу понять, как подключить это. Также важен порядок исполнения. Метод угловой службы doSomething () должен сначала выполнить свое дело с результатом, затем после этого может пойти компонент doSomethingInService ().
Я знаю, что на это, вероятно, уже был дан ответ, но я так плохо знаком с rxjs, что не могу понять, как сформулировать запрос.